需要记住:

  1. 如果能保证线程安全,那么volatile就是你的最佳选择。因为volatile不加锁,开销小,速度快,更轻量级,不会阻塞线程。
  2. 如果不能,那还是synchronized吧。安全第一,慢就慢点吧。

一、volatile适用场合

QQ截图20151114180144

二、比较一下两种同步方法

QQ截图20151114180251

三、总结一下

QQ截图20151114182008

这个问题不知道怎么解释啊…

QQ截图20151114182121

问题是,开发语言的家伙,早就发现了这个问题。所以在声明这些变量时,虚拟机默认的就加了volatile,轮不到我们去担心了。

用这些现成的环境,基本上用不着加volatile关键字。那么反过来,我们自己去写底层环境的时候,就要注意加上volatile关键字。

四、用一个问题来结束今天下午的学习

关于64位变量加volatile关键字的问题:

提问:在之前的讲解中,volatile变量并不能保证原子性,为何对64位变量通过加volatile关键字来保证原子操作呢?

回答:volatile本身不保证获取和设置操作的原子性,仅仅保持修改的可见性。

但是java的内存模型保证volatile修饰的long和double变量的get和set操作是原子的,所以能保证线程安全。

非常笼统的回答,以后会有更详细的解释。

发表评论

电子邮件地址不会被公开。 必填项已用*标注