Когда я только начинал писать код для межпоточной коммуникации с использованием методов
wait(), notify() и notifyAll(), я использовал if для проверки условия ожидания перед вызовом wait() и notify():synchronized(queue) {
if(queue.isFull()){
queue.wait();
}
}🗣️ К счастью, проблем не возникло, но я понял свою ошибку, прочитав раздел из книги Effective Java. Там сказано, что условие ожидания следует проверять в цикле, потому что потоки могут получать ложные уведомления, и до того, как вы что-то сделаете, условие может снова стать истинным. Поэтому правильный способ использования wait() и notify() выглядит так:
synchronized(queue) {
while(queue.isFull()){
queue.wait();
}
}Java Learning 👩💻
