Ответ
Метод notify() — это механизм межпоточной синхронизации, определенный в классе Object. Он пробуждает один произвольный поток, ожидающий на мониторе этого объекта (находящийся в его wait-set).
Ключевые аспекты:
- Контекст: Должен вызываться только внутри синхронизированного блока/метода, удерживающего монитор того же объекта, иначе
IllegalMonitorStateException. - Действие: Пробуждает один поток, но не освобождает монитор. Текущий поток продолжает удерживать монитор до выхода из
synchronizedсекции. - Использование: Классический шаблон Producer-Consumer.
Пример:
synchronized (sharedLock) {
// Производитель добавил данные
newDataAvailable = true;
sharedLock.notify(); // Сигнал одному потребителю
}
Важно: Для пробуждения всех ожидающих потоков используется notifyAll(). Выбор между notify() и notifyAll() зависит от логики приложения.