Как работают методы 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(); // Оповещение производителя
    }
}