В моем коде у меня есть цикл, который ожидает, что какое-то состояние будет изменено из другого потока. Другая нить работает, но мой цикл никогда не видит измененного значения. Он ждет всегда. Однако, когда я вставляю оператор 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");
. Что происходит?