Pregunta

Mi maestro en una clase de Java de nivel superior en Threading dijo algo de lo que no estaba seguro.

Dijo que el siguiente código no necesariamente actualizaría el ready variable. Según él, los dos hilos no necesariamente comparten la variable estática, específicamente en el caso cuando cada hilo (hilo principal versus ReaderThread) se ejecuta en su propio procesador y, por lo tanto, no comparte los mismos registros/caché/etc. y una CPU no actualizará la otra.

Esencialmente, dijo que es posible que ready se actualiza en el hilo principal, pero no en el ReaderThread, de modo que ReaderThread se enrollará infinitamente.

También afirmó que era posible que el programa imprima 0 o 42. Entiendo como 42 podría imprimirse, pero no 0. Mencionó que este sería el caso cuando el number La variable se establece en el valor predeterminado.

Pensé que tal vez no está garantizado que la variable estática se actualice entre los hilos, pero esto me parece muy extraño para Java. Realiza la creación ready ¿Volátil 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;  
    }  
}

No hay solución correcta

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top