Цикл не видит значение, измененное другим потоком без оператора печати

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

85
задан Raedwald 10 January 2019 в 11:59
поделиться