En primer lugar, no hay garantizado forma de exponer el almacenamiento en caché debido a variables no volátiles. Su JVM puede ser muy amable con usted todo el tiempo y tratar eficazmente cada variable como volátil.
Dicho esto, hay algunas maneras de aumentar la probabilidad de que los subprocesos guarden en caché sus propias versiones de una variable no volátil. Aquí es un programa que expone la importancia de la volatilidad en la mayoría de las máquinas que he probado en (versión adaptada de here):
class Test extends Thread {
boolean keepRunning = true;
public void run() {
while (keepRunning) {
}
System.out.println("Thread terminated.");
}
public static void main(String[] args) throws InterruptedException {
Test t = new Test();
t.start();
Thread.sleep(1000);
t.keepRunning = false;
System.out.println("keepRunning set to false.");
}
}
Este programa tendrá típicamente solo salidas de
keepRunning set to false.
y continuar funcionando. Hacer keepRunning
volátil hace que se imprima
keepRunning set to false.
Thread terminated.
y terminar.
Si ya conoce la teoría, ¿por qué no prueba algo? – home