论坛首页 Java企业应用论坛

关于volatile 关键字的使用

浏览 4252 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2013-03-02  
Java代码 
public class IncreaseTest {  
    private int value = 0;  
      
    public synchronized int increment() {  
        return value++;  
    }  
}  



上面代码中,方法increment()是线程安全的吗?是否必须要加上关键字:volatile 才是线程安全的呢?


Java代码 
private volatile int value = 0;  
   发表时间:2013-03-04  
increment是线程安全的,因为已经有synchronized了。
更多volatile:
http://ifeve.com/syn-jmm-volatile/
http://ifeve.com/volatile/
http://ifeve.com/java-memory-model-4/
0 请登录后投票
   发表时间:2013-03-05  
java中, ++ 操作并非原子操作,需要锁机制。
0 请登录后投票
   发表时间:2013-03-05  
volatile 变量是线程安全的
放心使用
0 请登录后投票
   发表时间:2013-03-05  
synchronized 关键字可以保证有序性和可见性
volatile关键字可以保证可见性

因此只需要使用synchronized 即可 ,不用再加volatile。
0 请登录后投票
   发表时间:2013-03-06  
synchronized锁的很严实了,不再需要volatile了
0 请登录后投票
   发表时间:2013-03-06  
mynaAo7I 写道
synchronized 关键字可以保证有序性和可见性
volatile关键字可以保证可见性

因此只需要使用synchronized 即可 ,不用再加volatile。


不需要加了
0 请登录后投票
   发表时间:2013-03-07   最后修改:2013-03-07
http://bun-ny.iteye.com/blog/1434319
这里有很详细的解释
0 请登录后投票
   发表时间:2013-03-08   最后修改:2013-03-08
加锁同时保证原子性,可见性和顺序性,是线程安全的,不需要再使用volatile。
0 请登录后投票
   发表时间:2013-03-08  
mynaAo7I 写道
synchronized 关键字可以保证有序性和可见性
volatile关键字可以保证可见性

因此只需要使用synchronized 即可 ,不用再加volatile。

扯!
sync和volatile都可以保证有序性和可见性,volatile不保证原子性。
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics