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

关于volatile的一些理解

时间:2016-12-04 11:29:59      阅读:168      评论:0      收藏:0      [点我收藏+]

标签:多个   ssi   str   tor   底层实现   volatile   网上   sign   如何   

什么是volatile?什么是可见性?

volatile本意是易变的,就是说它修饰的变量可能经常被修改。

可见性就是说多线程访问一个共享变量的时候,任何的修改都会让所有的线程知道并且更新。

 

如何实现可见性?

计算机底层实现:多个CPU都有自己的高速缓存,但是都共享主内存;当多个CPU把内存中共享的变量读到自己的缓存中后(缓存行),如果进行了修改,就会让其他CPU的缓存行失效,所以下次再读取的时候就会去内存中读。

JVM实现:线程工作内存类似于缓存,JVM主内存类似于计算机的主内存。注意只是类似。对于线程工作内存和主内存的交互,JVM定义了8个原子操作:read、load、use、assign、store、write以及lock和unlock。关于这一块不细说,网上有很多教程解释的很清楚。

 

volatile能保证原子性吗?

i++是原子操作吗?不是。

i++的执行过程可以分为3个操作的组合:

x = i;

y = x + 1;

x = y;

所以当多线程执行i++操作时,即使变量i被声明为volatile,最后的结果还是不可预料。

也就是说,volatile只能保证可见性,而不能保证原子性。

关于volatile的一些理解

标签:多个   ssi   str   tor   底层实现   volatile   网上   sign   如何   

原文地址:http://www.cnblogs.com/cz123/p/6130270.html

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