¿Por qué volatile no funciona correctamente?

Hoy estaba creando un trabajo de timeout usandoTimerTask pero cayó en un nuevo problema donde tengo unastatic volatile boolean variableflag. Mi comprensión es que tan pronto como el valor de esta variable se modifique, se notificará por todos los que estén en ejecución.thread. Pero cuando ejecuté este programa obtuve una salida inferior a la que no es aceptable.

O / P:

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

Mi expectativa es que mi última impresión seaProceso de salida .. ¿Por qué es este extraño comportamiento?

Mi código es:

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

}

Editar: Cómo puedo conseguir esto ?

Respuestas a la pregunta(6)

Su respuesta a la pregunta