Warum sieht Java den aktualisierten Wert nicht von einem anderen Thread?

Bitte schauen Sie sich diesen Code an (entnommen aus dem Effective Java-Buch)

import java.util.concurrent.TimeUnit;


public class Main {
private static boolean stopReq;
public static void main(String[] args) throws InterruptedException {


    Thread bgw = new Thread(new Runnable()
    {
        public void run(){

        int i = 0;
        while(!stopReq){ i++;}
        }
        });
    bgw.start();
    TimeUnit.SECONDS.sleep(1);
    stopReq = true;

}

}

Warum macht dasbgw Thread in einer Endlosschleife stecken bleiben? Cacht es eine eigene Kopie vonstopReq Wann hat es die Schleife erreicht? So sieht es nie den aktualisierten Wert aus dem anderen Thread?

Ich verstehe, dass die Lösung für dieses Problem eine Synchronisierung oder eine flüchtige Variable ist, bin aber gespannt, warum diese aktuelle Implementierung nicht funktioniert.

Vielen Dank

Antworten auf die Frage(5)

Ihre Antwort auf die Frage