В Java Concurrency на практике есть пример, который запутал меня:
public class Novisibility {
private static boolean ready;
private static int number;
private static class ReaderThread implements Runnable {
public void run() {
while (!ready) {
Thread.yield();
}
System.out.println(number);
}
}
public static void main(String[] args) {
System.out.println("0");
new Thread(new ReaderThread()).run();
System.out.println("1");
number = 42;
System.out.println("2");
ready = true;
System.out.println("3");
}
}
Я могу понять, что переупорядочение делает цикл никогда не прерываться, но я не могу понять, почему«1», «2» и «3» никогда не выводятся на консоль.Может ли какое-нибудь тело помочь?