在看书的时候,把第十章的第66条 同步访问共享的可变数据的例子做下练习,结果竟然跟书上写的不一样,求大神没解释,这个是什么情况!下面附上代码! 广大童鞋们可以自己试验下! public class StopThread {
private static boolean stopRequested; public static void main(String[] args) throws InterruptedException {
Thread backgroundThread = new Thread(new Runnable() {

@Override
public void run() {
int i=0;
while(!stopRequested){
i++;
System.out.println(i);
}
}
});
backgroundThread.start();
TimeUnit.SECONDS.sleep(1);
stopRequested = true;
}
}书上说的是,这个程序永远不会终止! 这可是现在google首席java架构师的书啊!
可是俺在运行的时候,程序运行了1秒就停止了!

解决方案 »

  1.   

    stopRequested 赋值是原子操作台
      

  2.   

    “书上说的是,这个程序永远不会终止!”
    你仔细看看,书上有说的这么肯定么!只是有可能,或万分之一或亿分之一等概率因为多线程存取同一个变量的时候,如果没有适当的同步,a线程的更改是有可能不被b线程看见的这涉及jvm的实现,以及cpu缓存等内容
      

  3.   

    《java concurrency in practice》一书上有更为深入和透彻的解释,看看第三章
      

  4.   

    这本书,跟Effective java  是同一个作者!