黑马程序员技术交流社区

标题: 有大虾能解释下volatile变量是怎么保证线程同步的? [打印本页]

作者: justin1258    时间: 2014-8-5 21:35
标题: 有大虾能解释下volatile变量是怎么保证线程同步的?
本帖最后由 justin1258 于 2014-8-11 13:02 编辑

网上讲得大多都很晦涩难懂。
作者: fantacyleo    时间: 2014-8-5 21:42
volatile不保证线程同步,不保证各个线程按照你预期的某种先后顺序去访问volatile变量,它的作用是保证内存一致性。也就是说,某一个线程访问volatile变量并改变了它的值,那么这个改变将立即反映到内存中,此刻之后的线程再读取这个变量时,看到的就是这个已经改变过的值。
作者: justin1258    时间: 2014-8-5 21:58
fantacyleo 发表于 2014-8-5 21:42
volatile不保证线程同步,不保证各个线程按照你预期的某种先后顺序去访问volatile变量,它的作用是保证内存 ...

那什么情况下可以用这个关键字呢?能不能举个例子?
作者: fantacyleo    时间: 2014-8-5 22:10
justin1258 发表于 2014-8-5 21:58
那什么情况下可以用这个关键字呢?能不能举个例子?

多个线程要访问同一个变量,且其中至少有一个线程会修改变量的值,这个时候就要用volatile修饰变量了。当然,你也可以把这个变量变为私有,不让外界直接访问,而对外提供getter和setter方法,然后对方法加同步锁,这样的话就不用把变量设置为volatile了




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2