Это связано с тем, как работают эти методы и мониторы (ассоциированные с объектами).
wait(): Освобождает монитор объекта и переводит вызывающий поток в состояние ожидания, пока не получит уведомление (notify() или notifyAll()) и не сможет повторно захватить монитор. Если wait() вызовется без захваченного монитора, невозможно было бы его освободить, что привело бы к некорректному поведению и исключению IllegalMonitorStateException
.
notify() / notifyAll(): Выбирает один или все ожидающие потоки (которые вызвали wait() на этом же объекте) и переводит их в состояние готовности к запуску. Эти методы также должны вызываться внутри синхронизированного блока, чтобы гарантир
Это связано с тем, как работают эти методы и мониторы (ассоциированные с объектами).
wait(): Освобождает монитор объекта и переводит вызывающий поток в состояние ожидания, пока не получит уведомление (notify() или notifyAll()) и не сможет повторно захватить монитор. Если wait() вызовется без захваченного монитора, невозможно было бы его освободить, что привело бы к некорректному поведению и исключению IllegalMonitorStateException
.
notify() / notifyAll(): Выбирает один или все ожидающие потоки (которые вызвали wait() на этом же объекте) и переводит их в состояние готовности к запуску. Эти методы также должны вызываться внутри синхронизированного блока, чтобы гарантир
Зарегистрируйтесь или войдите, чтобы получить доступ к полным ответам на все вопросы из банка вопросов.