Почему volatile не работает должным образом
Сегодня я создавал одну тайм-аут работу, используяTimerTask
но попал в новую проблему, где у меня естьstatic volatile boolean
переменнаяflag
, Насколько я понимаю, как только значение этой переменной изменяется, она уведомляется всеми работающимиthread
, Но когда я запустил эту программу, я получил вывод ниже, что не приемлемо.
O/P:
--------------
--------------
DD
BB
Exiting process..
CC
Я ожидаю, что мой последний отпечаток должен бытьExiting process.. Почему это странное поведение?
Мой код:
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();
}
}
Edit: Как я могу достичь этого?