Как работают методы wait(), notify(), и notifyAll() в Java
Ответ: Методы wait()
, notify()
, и notifyAll()
используются для межпотоковой синхронизации. Они вызываются на объекте мониторинга (например, в блоке synchronized
), чтобы управлять доступом потоков к критическим секциям.
wait()
: Останавливает выполнение текущего потока до тех пор, пока другой поток не вызовет notify()
или notifyAll()
на том же объекте.notify()
: Разбуждает один поток, ожидающий на данном объекте.notifyAll()
: Разбуждает все потоки, ожидающие на данном объекте.class SharedResource {
private boolean isAvailable = false;
public synchronized void produce() throws InterruptedException {
while (isAvailable) {
wait(); // Ожидание, пока ресурс не станет доступным
}
// Производство ресурса
isAvailable = true;
notify(); // Оповещение потребителя
}
public synchronized void consume() throws InterruptedException {
while (!isAvailable) {
wait(); // Ожидание, пока ресурс не станет доступным
}
// Потребление ресурса
isAvailable = false;
notify(); // Оповещение производителя
}
}