Dlaczego lotność nie działa prawidłowo

Dzisiaj tworzyłem jedną pracę na czas, używającTimerTask ale wpadłem w nowy problem, gdzie mamstatic volatile boolean zmiennaflag. Moje zrozumienie jest takie, że gdy tylko wartość tej zmiennej zostanie zmieniona, zostanie powiadomiona przez wszystkie uruchomionethread. Ale kiedy uruchomiłem ten program, otrzymałem wynik poniżej akceptowalnego.

O / P:

--------------
--------------
DD
BB
Exiting process..
CC

Moje oczekiwanie jest moim ostatnim drukiemProces wychodzenia .. Dlaczego to dziwne zachowanie?

Mój kod to:

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();
    }

}

Edytować: Jak mogę to osiągnąć?

questionAnswers(6)

yourAnswerToTheQuestion