我正在阅读这本书:“Java Concurrency in Practice”,以更好地了解 Java 并发的工作原理。在第 3 章第 3.1 节:可见性 书中有一个示例试图说明可见性问题是如何发生的。这是示例代码(书中的清单 3.1):
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;
}
}
这本书说 NoVisibility 可以永远循环,因为 ready 的值可能永远不会对读者线程可见。这怎么可能。我的一般理解是,无论如何,准备好会在某个时间成为现实。但我不明白为什么这可能不会发生并且循环永远存在。有人可以帮助我更好地理解这一点。