Вопрос проверяет понимание механизма межпоточного взаимодействия через мониторы объектов.
wait() и notify() используются для координации потоков:
wait() освобождает монитор и переводит поток в ожидание
notify() пробуждает один случайный ожидающий поток
Вызывать можно только в synchronized блоках, иначе IllegalMonitorStateException
Механизм работы:
Поток захватывает монитор объекта через synchronized
Вызов wait():
Освобождает монитор
Переводит поток в состояние WAITING
Другой поток вызывает notify()/notifyAll() для пробуждения
Поток перезахватывает монитор при пробуждении
Пример:
Object lock = new Object();
// Поток 1
synchronized (lock) {
lock.wait(); // Освобождает lock и ждет
}
// Поток 2
synchronized (lock) {
lock.notify(); // Пробуждает Поток 1
}Ограничения:
Требуется владение монитором
notify() пробуждает случайный поток
Альтернативы: Condition из java.util.concurrent