В Java Параллелизм на практике есть пример, который заставил меня путать:Странное поведение в Java параллелизм не используя синхронизацию
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» никогда не печатаются на консоли. Может ли любой орган помочь?