Для чего используется метод notify() в Java?

«Для чего используется метод notify() в Java?» — вопрос из категории Java Core, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Метод notify() — это механизм межпоточной синхронизации, определенный в классе Object. Он пробуждает один произвольный поток, ожидающий на мониторе этого объекта (находящийся в его wait-set).

Ключевые аспекты:

  • Контекст: Должен вызываться только внутри синхронизированного блока/метода, удерживающего монитор того же объекта, иначе IllegalMonitorStateException.
  • Действие: Пробуждает один поток, но не освобождает монитор. Текущий поток продолжает удерживать монитор до выхода из synchronized секции.
  • Использование: Классический шаблон Producer-Consumer.

Пример:

synchronized (sharedLock) {
    // Производитель добавил данные
    newDataAvailable = true;
    sharedLock.notify(); // Сигнал одному потребителю
}

Важно: Для пробуждения всех ожидающих потоков используется notifyAll(). Выбор между notify() и notifyAll() зависит от логики приложения.