Mi profesor en una clase de Java de nivel superior sobre subprocesos dijo algo de lo que no estaba seguro.
Dijo que el siguiente código no actualizaría necesariamente la readyvariable. Según él, los dos hilos no comparten necesariamente la variable estática, específicamente en el caso en que cada hilo (hilo principal versusReaderThread ) se ejecuta en su propio procesador y, por lo tanto, no comparte los mismos registros / caché / etc. y una CPU. no actualizará el otro.
Esencialmente, dijo que es posible que readyse actualice en el hilo principal, pero NO en el ReaderThread, por lo queReaderThread repetirá infinitamente.
También afirmó que era posible que el programa imprimiera 0o 42. Entiendo cómo 42podría imprimirse, pero no 0. Mencionó que este sería el caso cuando elnumber variable se establece en el valor predeterminado.
Pensé que tal vez no se garantiza que la variable estática se actualice entre los subprocesos, pero esto me parece muy extraño para Java. ¿Hacer readyvolátiles corrige este problema?
Mostró este código:
public class NoVisibility {
private static boolean ready;
private static int number;
private static class ReaderThread extends Thread {
public void run() {
while (!ready) Thread.yield();
System.out.println(number);
}
}
public static void main(String[] args) {
new ReaderThread().start();
number = 42;
ready = true;
}
}
