Почему 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: Как я могу достичь этого?

Ответы на вопрос(6)

Ваш ответ на вопрос