public class ThreadTest {
private static boolean ready;
private static int number;
private static class ReaderThread extends Thread {
/* (non-Javadoc)
* @see java.lang.Thread#run()
*/
public void run() {
while(!ready) {
Thread.yield();
System.out.println(number);
}
}
} /**
* @param args
*/
public static void main(String[] args) {
new ReaderThread().start();
number = 42;
ready = false; }}
ReaderThread可能会一直保持循环,因为对于ReaderThread来说,ready的值可能永远不可见。为什么对于ReaderThread来说ready的值不可见?
ready = true;
这样的话我测试了好几遍,都不会像书上说的一直保持循环,但是《java并发编程实践》里面的“那句ready的值可能永远不可见”是什么意思。
private volatile static boolean ready;
volatile可以保证可见性。