Digamos que tengo un hilo conductor de esta manera:valor Obtención de una variable hilo desde fuera
private boolean working = true;
@Override public void run() {
working = true;
// do something
working = false;
....
}
y en mi hilo principal que estoy poniendo constantemente el estado de trabajo con
while(threadClassObject.isWorking()) {
System.out.println(threadClassObject.isWorking());
}
¿funcionaría esto? Intenté este ejemplo y parece funcionar. Pero, ¿hay alguna manera de que esto pueda colapsar? Lo que v.g. Qué sucede si el hilo está en el proceso de cambiar de trabajo mientras que al mismo tiempo el hilo principal intenta leerlo?
Ok gracias por las respuestas chicos, ahora lo han cambiado a volátil. ¿Qué pasaría exactamente si colisionan?Porque ahora he hecho 2 bucles sin fin, uno en el hilo que cambia constantemente la variable de trabajo y otro en el hilo principal que lo comprueba constantemente y no pasa nada. –
Básicamente gracias a la optimización en el nivel de cpu, los valores cambiaron mi único hilo podría no ser visible para otro. Un buen ejemplo es la optimización de la memoria caché de la CPU. Los valores nunca se reflejan en el RAM donde podría estar leyendo el otro subproceso. Volátil dice que el valor de esta variable se puede cambiar fuera del alcance de hilo actual por lo que no tal optimización se realiza ... – havexz