Да. Представьте, что вы реализуете проблему «производитель - потребитель» с synchronize, wait, and notify
. (правка) В котором 2 производителя и 2 потребителя ждут на одном мониторе объекта (конец редактирования) . Производитель вызывает notify
в этой реализации. Теперь предположим, что у вас есть два потока, выполняющих путь кода источника. Возможно, что Producer1 вызывает notify
и пробуждает Producer2. Producer2 понимает, что он не может выполнять какую-либо работу и впоследствии не может вызвать notify
. Теперь вы зашли в тупик.
(правка) Если бы был вызван notifyAll
, тогда и Consumer1, и Consumer2 проснулись бы в дополнение к Producer2. Один из потребителей потребил бы данные и, в свою очередь, вызвал бы notifyAll
, чтобы разбудить хотя бы одного производителя, что позволило бы очень сломанной реализации успешно работать.
Вот контрольный вопрос, на котором я основываю свой сценарий:
Зависит потребительский продукт