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?

Antworten auf die Frage(6)

Ihre Antwort auf die Frage