8
回答
java 一个volatile的疑惑
滴滴云服务器,限时包月0.9元,为开发者而生>>>   
请问这个reader方法是线程安全的么
举报
单刀
发帖于2年前 8回/402阅
共有8个答案 最后回答: 2年前

 

volatile变量自身具有下列特性:

  • 可见性。对一个volatile变量的读,总是能看到(任意线程)对这个volatile变量最后的写入。
  • 原子性:对任意单个volatile变量的读/写具有原子性,但类似于volatile++这种复合操作不具有原子性。

因此此写法是线程安全的

可以看我blog:http://my.oschina.net/kolnick/blog/625632  这个是volatile的应用场景

--- 共有 2 条评论 ---
_Revive回复 @单刀 : 怎么不理解了 ,你倒是说说 别人问的是这个方法 是不是线程安全,他又没说当前这个类是否 是做为 全局共享变量。 2年前 回复
单刀不安全 ,你把书上的东西都搬到网上来,可是你没理解它 2年前 回复
感觉你问的很不专业啊,线程安不安全还用看 ?你这个方法 压根就没有做修改全局数据的操作,何来线程安不安全?另外 关于volatile 的问题 可以看看我这篇博客。哈哈http://my.oschina.net/ambitor/blog/661907
--- 共有 7 条评论 ---
Ambitor回复 @单刀 : ....大兄弟,无论你的类的实例被什么结构引用,无论你改变这个标志有多少,只要完全不涉及全局变量(也就是主存的数据) 是不会有线程安全问题的,就和你这个例子一样。 所以我说你这个问法 要么是例子没写明白 要么是问的不对。。 2年前 回复
单刀回复 @Ambitor : 这个局部变量 i确实是个失败的例子,给它换成成员变量吧 2年前 回复
单刀回复 @Ambitor : 首先,除了全局变量,成员变量也有线程安全问题。再者,没人告诉你这个类的实例被一个什么样的结构引用,改变那个状态标识的地方可以有很多 2年前 回复
Ambitor回复 @单刀 : 对于你这个例子 reader方法 里面只是做了一个简单的赋值 int i=a 并没使用到i变量做任何事情 完全是一个幂等的方法。 2年前 回复
Ambitor回复 @单刀 : 还有再请问楼主 除了操作主内存数据的时候会有线程安全的考虑 难道在操作线程私有的工作内存数据的时候也需要考虑线程安全问题,比如TLAB的数据? 2年前 回复
顶部