В чем назначение метода notify() у класса Object в Java?

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

Ответ

Метод notify() класса Object предназначен для уведомления и пробуждения потоков в рамках низкоуровневой модели синхронизации на основе мониторов (wait/notify).

Принцип работы:

  1. Поток вызывает wait() на объекте, освобождает его монитор и переходит в состояние ожидания (попадает в wait-set объекта).
  2. Другой поток, захватив тот же монитор, вызывает notify().
  3. Один поток из wait-set переводится в состояние блокировки (BLOCKED) и будет пытаться перезахватить монитор, когда он освободится.

Синтаксис и ограничения:

final Object monitor = new Object();

// В потоке-уведомителе
synchronized (monitor) {
    monitor.notify(); // Пробуждение одного ожидающего
}

Почему это важно? Это базовый механизм кооперативной синхронизации, лежащий в основе высокоуровневых конструкций (Lock, Condition). Используется для эффективной реализации шаблонов, где потоки координируют доступ к общему ресурсу, избегая активного ожидания (busy-wait).