首页 > 代码库 > 关于volatile的一些理解
关于volatile的一些理解
什么是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的一些理解
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。