Измените условие while
, как показано ниже, и посмотрите на комментарии. С вашим текущим кодом производитель никогда не выполняет.
Почему? потому что isBinFull
изначально имеет значение false и ложно для потребителя тоже
и внутри вашего кода производителя
while (!isBinFull) wait ();
никогда не станет false
и будет ждать внутри цикла while
.
Измените код, как показано ниже
public synchronized void placePopcorn () throws InterruptedException {
while (true) {
while (isBinFull) wait(); //Look here, waiting since bin is full
isBinFull = true;
System.out.println(Thread.currentThread().getName() + ":"+isBinFull);
notifyAll ();
Thread.sleep(500);
}
}
// consumer code
public synchronized void takePopcorn () throws InterruptedException {
while (true) {
while (!isBinFull) wait(); ////Look here, waiting since bin is not full
isBinFull = false;
System.out.println(Thread.currentThread().getName() + ":"+isBinFull);
notifyAll ();
Thread.sleep(500);
}
}