Многопоточность trainee
Где можно вызывать wait и notify?
Ответ
Только внутри synchronized-блока на том же объекте (иначе IllegalMonitorStateException). wait() отпускает монитор, поток засыпает. notify() / notifyAll() — будит. После notify поток должен снова получить монитор, чтобы продолжить.
Разбор: wait()/notify()/notifyAll() требуют владения монитором объекта, поэтому вызываются только внутри synchronized на том же объекте, иначе бросается IllegalMonitorStateException. Ключевая ловушка: wait() именно ОТПУСКАЕТ монитор (а не удерживает), позволяя другому потоку войти в synchronized и вызвать notify(); volatile к мониторам отношения не имеет.
Хочешь так же по своей компании — с вопросами по грейдам и задачами? Закажи гайд или забери свежее в Telegram.