读书人

并发-Effective Java的一小段代码

发布时间: 2012-09-03 09:48:39 作者: rapoo

并发--Effective Java的一小段代码

          if(!stopRequested) {                while(true){                    i++;                }           }


,这种情况,backgroundThread线程永远不会结束。

为了避免以上两种情况,可以用volatile修饰stopRequested,这样每个线程在修改stopRequested后都会把修改结果同步到主内存,每个线程在读取stopRequested时都会从主内存中获取;volatile同时也阻止了jvm对第二种情况的优化

建议细看: 《java并发编程实践》

注:
在不加 volatile修饰, 把i++改成System.out.println("t"); 的情况下, 使用-server, -client参数都会在1秒后退出.

在windows下,jvm默认是client模式, 在linux下默认是 server模式.

参考:
Java线程安全兼谈DCL
用happen-before规则重新审视DCL

读书人网 >编程

热点推荐