《java并发编程实战》一书中第三章 可见性章节中说
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;
}
}
“该代码可能会输出0,也可能持续循环下去,因为读线程可能永远都看不到ready的值”
输出0,还能理解,因为number没有加volatile。
为什么可能“永远都看不到ready的值”?
跟
number
一样啊一直读的是本线程内存,缓存的false
值