Когда я прочитал « 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.
Вся причина в том, что мне слишком везет?