In der Schleife wird kein Wert angezeigt, der von einem anderen Thread ohne eine print-Anweisung geändert wurde

In meinem Code habe ich eine Schleife, die darauf wartet, dass ein Zustand von einem anderen Thread geändert wird. Der andere Thread funktioniert, aber meine Schleife sieht nie den geänderten Wert.Es wartet für immer. Wenn ich jedoch eineSystem.out.println Aussage in der Schleife, es funktioniert plötzlich! Warum?

Folgendes ist ein Beispiel für meinen Code:

class MyHouse {
    boolean pizzaArrived = false;

    void eatPizza() {
        while (pizzaArrived == false) {
            //System.out.println("waiting");
        }

        System.out.println("That was delicious!");
    }

    void deliverPizza() {
        pizzaArrived = true;
    }
}

Während die while-Schleife läuft, rufe ich andeliverPizza() von einem anderen thread zum einstellen despizzaArrived Variable. Aber die Schleife funktioniert nur, wenn ich das auskommentiereSystem.out.println("waiting"); Aussage. Was ist los?

Antworten auf die Frage(1)

Ihre Antwort auf die Frage