Junior — Middle
Czy w praktyce stosuje się mechanizmy takie jak synchronized, wait i notifyAll do zarządzania wątkami?
sobes.tech AI
Odpowiedź od AI
Tak, w praktyce programowania w Java mechanizmy synchronized, wait i notifyAll są używane do zarządzania wątkami, szczególnie w przypadkach, gdy konieczne jest zaimplementowanie niskopoziomowej synchronizacji i koordynacji między wątkami.
- synchronized służy do zapewnienia wzajemnego wykluczania podczas dostępu do zasobów współdzielonych.
- wait() powoduje, że bieżący wątek czeka, zwalniając monitor, aż inny wątek wywoła notify() lub notifyAll().
- notifyAll() budzi wszystkie wątki oczekujące na tym obiekcie.
Jednak w nowoczesnych aplikacjach częściej używa się wyższych narzędzi z pakietu java.util.concurrent (np. Lock, Semaphore, CountDownLatch), ponieważ są one bardziej elastyczne i wygodne.
Przykład użycia synchronized, wait i notifyAll:
class SharedResource {
private boolean ready = false;
public synchronized void waitForReady() throws InterruptedException {
while (!ready) {
wait();
}
// kontynuuj pracę
}
public synchronized void setReady() {
ready = true;
notifyAll();
}
}