这个问题已经在这里有一个答案:
- 关于“Java并发实践”的例子问题 6个回答
我读的书:“Java并发实践”,以便更好地理解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可能永远循环下去,因为准备的价值可能永远不会成为读者线程可见。 这怎么可能。 我一般的理解是,准备将在一定的时间内成为真正的反正。 但我不明白为什么这可能不会发生,循环将会永存。 有人可以帮助我更好地理解这种。