видимость потока Java - PullRequest
       1

видимость потока Java

5 голосов
/ 26 марта 2012

Когда я прочитал « java-параллелизм на практике » c03, меня смутила следующая программа:

public class NoVisibility { 
    private static boolean ready; 
    private static int number; 

    private static class ReaderThread extends Thread { 
        public void run() { 
            while (!ready) 
                Thread.yield(); 
            System.out.println(number); 
        } 
    } 

    public static void main(String[] args) { 
        new ReaderThread().start(); 
        number = 42; 
        ready = true; 
    } 
}

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

1 Ответ

9 голосов
/ 26 марта 2012

Вся причина в том, что мне слишком везет?

Не обязательно.Это будет зависеть от архитектуры вашего процессора и реализации JVM.Это одна из проблем с тонкими проблемами модели памяти: их очень трудно воспроизвести в дикой природе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...