В моем коде есть цикл, который ожидает изменения какого-либо состояния из другого потока. Другой поток работает, но мой цикл никогда не видит измененное значение. Он ждет вечно. Однако, когда я помещаю оператор System.out.println
в цикл, он неожиданно работает! Почему?
Ниже приведен пример моего кода:
class MyHouse {
boolean pizzaArrived = false;
void eatPizza() {
while (pizzaArrived == false) {
//System.out.println("waiting");
}
System.out.println("That was delicious!");
}
void deliverPizza() {
pizzaArrived = true;
}
}
Во время выполнения цикла while я вызываю deliverPizza()
из другого потока, чтобы установить pizzaArrived
переменная. Но цикл работает только тогда, когда я раскомментирую оператор System.out.println("waiting");
. Что происходит?