码迷,mamicode.com
首页 > 其他好文 > 详细

volatile关键字的特性总结

时间:2017-12-17 23:58:01      阅读:289      评论:0      收藏:0      [点我收藏+]

标签:volatile   ble   double   重排序   共享   读取   gpo   另一个   ola   

当一个变量定义为volatile后,它将具备两个特性:

1.保证此变量对所有线程的可见性,所谓“可见性”,,是指当一个线程修改了这个变量的值,新值对于其他线程来说是可以立即得知的。(通过主内存,一个线程修改了共享变量,新值立即同步到主内存,其他线程读取该值时从主内存中拉取)

 

由于volatile变量只能保证可见性,在不符合以下两条规则的运算场景中,我们仍然要通过加锁来保证原子性。

(1)运算结果并不依赖变量的当前值,或者能够确保只有单一的线程修改变量的值。

(2)变量不需要与其他的状态变量共同参与不变约束(if(a>b)这种形式)

2.禁止指令重排序,进而保证有序性。Java中天然的有序性可以总结为一句话:如果在本线程内观察,所有的操作都是有序的;如果在一个线程中观察另一个线程,所有的操作都是无序的。

3.保证long和double类型变量的原子性。

volatile关键字的特性总结

标签:volatile   ble   double   重排序   共享   读取   gpo   另一个   ola   

原文地址:http://www.cnblogs.com/yiRain1992/p/8053557.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!