Может ли несколько потоков ожидать один объект одновременно? - PullRequest
3 голосов
/ 18 апреля 2011

Если wait можно вызывать только из синхронизированного контекста, и вы можете вызывать wait только для объекта, удерживая его блокировку, то как несколько потоков могут ожидать один и тот же объект? Кроме того, поскольку уведомление также должно вызываться из синхронизированного контекста, как может происходить уведомление?

Ответы [ 2 ]

8 голосов
/ 18 апреля 2011

Метод ожидания освобождает блокировку объекта, которого он ожидает.После освобождения другой объект может получить блокировку, а также ждать или уведомлять.И это все прямо в Javadoc .

1 голос
/ 18 апреля 2011

Не прямой ответ на ваш вопрос, но вместо использования метода ожидания вы можете использовать класс CountDownLatch в параллельном пакете, представленном в Java 5. Вы можете инициализировать CountDownLatch в классевы будете ждать, и методы, ожидающие его, должны выполнить метод await (), и чтобы освободить фиксатор, вы вызываете метод countDown ().На мой взгляд, это более чисто и понятно, чем использование wait ().В книге «Эффективное Java» есть очень интересная тема об этом классе.

...