Ответ
Метод notify() класса Object предназначен для уведомления и пробуждения потоков в рамках низкоуровневой модели синхронизации на основе мониторов (wait/notify).
Принцип работы:
- Поток вызывает
wait()на объекте, освобождает его монитор и переходит в состояние ожидания (попадает в wait-set объекта). - Другой поток, захватив тот же монитор, вызывает
notify(). - Один поток из wait-set переводится в состояние блокировки (BLOCKED) и будет пытаться перезахватить монитор, когда он освободится.
Синтаксис и ограничения:
final Object monitor = new Object();
// В потоке-уведомителе
synchronized (monitor) {
monitor.notify(); // Пробуждение одного ожидающего
}
Почему это важно? Это базовый механизм кооперативной синхронизации, лежащий в основе высокоуровневых конструкций (Lock, Condition). Используется для эффективной реализации шаблонов, где потоки координируют доступ к общему ресурсу, избегая активного ожидания (busy-wait).