Warum flüchtig nicht richtig funktioniert
Heute habe ich einen Timeout-Job mit erstelltTimerTask
bin aber auf ein neues problem gestoßen wo ich ein habestatic volatile boolean
Variableflag
. Ich verstehe, sobald der Wert dieser Variablen geändert wird, wird dies von allen Laufenden mitgeteiltthread
. Aber als ich dieses Programm ausgeführt habe, bin ich unter die Ausgabe gekommen, die nicht akzeptabel ist.
O / P:
--------------
--------------
DD
BB
Exiting process..
CC
Ich erwarte, dass mein letzter Abdruck sein sollteVorgang wird beendet .. Warum ist das seltsame Verhalten?
Mein Code ist:
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();
}
}
Bearbeiten: Wie kann ich das erreichen?