Странное поведение в Java при несинхронизированном доступе в многопоточной программе

, я изменяю значение, которое используется для определения, когда цикл while завершается в отдельном потоке.
Я не хочу знать, как заставить это работать. Если я обращаюсь к тесту переменных только через синхронизированные геттеры / сеттеры, он работает так, как ожидалось.

Я ожидал, что если некоторые команды чтения / записи теряются из-за параллелизма, программа иногда не завершается, но никогда делает. Вот что меня смущает ..
Я хотел бы знать, почему программа никогда не завершается без команды печати. И я хотел бы понять, почему команда печати что-то меняет ..

     

    public class CustomComboBoxDemo  {
        public static boolean test = true;
        public static void main(String[] args) {
            Thread user =new Thread(){
                @Override
                public void run(){
                    try {
                        sleep(2000);
                    } catch (InterruptedException e) {}
                    test=false;
                }
            };
            user.start();
            while(test) {
                System.out.println("foo"); //Without this line the program does not terminate..
            }
        }
    }

5
задан Heinrich Ody 5 January 2012 в 14:14
поделиться