Ответ
Метод notify() используется для пробуждения одного потока, ожидающего на мониторе объекта. Он должен вызываться из синхронизированного блока или метода (synchronized), иначе выбрасывается IllegalMonitorStateException.
Пример:
synchronized (lock) {
lock.notify(); // пробуждает один случайный поток из wait-set
}
Важные нюансы:
- Поток должен владеть монитором объекта
- Пробуждается только один поток (случайный из ожидающих)
- Пробужденный поток не сможет продолжить выполнение, пока текущий поток не освободит монитор
Для пробуждения всех ожидающих потоков используется notifyAll().