О методах wait () и notify () потока в Java - PullRequest
2 голосов
/ 01 марта 2011

Я знаю механизм потоков wait() и notify(), но не могу понять, почему методы wait() и notify() должны быть в блоке synchronized?Это обязательно?

Заранее спасибо!

1 Ответ

4 голосов
/ 01 марта 2011
  1. Обязательна ли синхронизация при вызове ожидания / уведомления : Да

  2. Почему? : Учтите, что синхронизация не требовалась. Это означает, что поток A может вызывать notify () ровно в то же время, пока другой поток B вызывает wait () (для того же объекта). Предположим, что поток B выполнил часть метода wait () и переключен по контексту для обслуживания потока A. Таким образом, внутренние структуры данных ожидания теперь могут находиться в поврежденном состоянии. Теперь метод notify () по существу работает с теми же структурами данных, которые сейчас находятся в недопустимом состоянии. Следовательно все ожидание / уведомление может пойти на бросок. Синхронизация гарантирует, что никакой другой метод не может вызвать ожидание / уведомление, если уже есть вызов к одному из них.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...