简单__快乐 2014-04-01 14:20
浏览 231
已采纳

关于线程安全修饰符 volatile 使用的一点疑问

    最近在看关于线程方面的书,里边涉及到 volatile 修饰符。小弟有一点困惑,忘大家不吝赐教。

在<<java并发编程实践>> 这本书里边,有一小结谈论到该修饰符。里边指出该修饰符可以确保线程的可见性,但是不能确保操作的原子性。

也就是说在非原子性操作该变量的时候,还是会出现问题。书里说的是 "最低安全性" (类似数据库 read_uncommited) 。

   

写道
private volatile int i ;

void set(int i) this.i = i

int get() return i

 

以上是线程安全的,因为操作时原子的

 

写道
private volatile int i

void synchroized set(int i ) i++

int get() return i ;

 

 我想问的问题是 既然i 已经满足线程的可见性,那通过同步的set方法,get方法在不使用同步的情况在不同步的情况先是否可以获得最新的值(i++ 是非原子操作)

  • 写回答

1条回答 默认 最新

  • tianchao_ 2014-04-02 11:19
    关注

    get不使用同步可以获得最新的值。
    但是代码放到具体的环境中
    比如http://sprite311.iteye.com/blog/2036800
    就不能保证业务逻辑都是对的了

    concurrent包是用来解决复杂的并发问题的包

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?