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