¿Por qué volatile no funciona correctamente?
Hoy estaba creando un trabajo de timeout usandoTimerTask
pero cayó en un nuevo problema donde tengo unastatic volatile boolean
variableflag
. Mi comprensión es que tan pronto como el valor de esta variable se modifique, se notificará por todos los que estén en ejecución.thread
. Pero cuando ejecuté este programa obtuve una salida inferior a la que no es aceptable.
O / P:
--------------
--------------
DD
BB
Exiting process..
CC
Mi expectativa es que mi última impresión seaProceso de salida .. ¿Por qué es este extraño comportamiento?
Mi código es:
public class TimeOutSort {
static volatile boolean flag = false;
public static void main(String[] args) {
Timer timer = new Timer();
timer.schedule(new TimerTask() {
@Override
public void run() {
flag = true;
System.out.println("Exiting process..");
// System.exit(0);
}
}, 10 * 200);
new Thread(new Runnable() {
@Override
public void run() {
while (!flag)
System.out.println("BB");
}
}).start();
new Thread(new Runnable() {
@Override
public void run() {
while (!flag)
System.out.println("CC");
}
}).start();
new Thread(new Runnable() {
@Override
public void run() {
while (!flag)
System.out.println("DD");
}
}).start();
}
}
Editar: Cómo puedo conseguir esto ?