有如下代码:
最后的结果可能是:NoVisibility可能会一直保持循环, 因为对于读线程来说, ready的值可能永远不可见. 甚至更奇怪的现象是, NoVisibility可能会打印0, 因为经过优化,可能机器底层会先执行ready=true
上面第二个结果好理解, 第一个我就不明白.为什么ready值可能永远不可见导致程序会一直保持循环?
public class NoVisibility {
private static boolean ready;
private static int num;
private static class ReaderThread extends Thread {
public void run() {
while (!ready) {
Thread.yield();
}
System.out.println(num);
}
}
/**
* @param args
*/
public static void main(String[] args) {
new ReaderThread().start();
num = 24;
ready = true;
}
}
最后的结果可能是:NoVisibility可能会一直保持循环, 因为对于读线程来说, ready的值可能永远不可见. 甚至更奇怪的现象是, NoVisibility可能会打印0, 因为经过优化,可能机器底层会先执行ready=true
上面第二个结果好理解, 第一个我就不明白.为什么ready值可能永远不可见导致程序会一直保持循环?