Java是怎么保证原子性,可见性
2014-10-13 13:13
417 查看
先来谈谈可见性:
(1)volatile 变量:实际的作用:告诉jvm,这个变量的值不能取cpu的cache中的,应为那个值可能已经过时了,从这个层面来讲,volatile已经实现了可见性,但是他并没有实现原子性,原子性说白了就是一堆代码要一起执行完,比如说x++,这个在jvm层面上是要几条语句。。。。
(2)锁:jvm自己实现了一套内存一致性协议,对于变量的读写是由顺序控制的,read,load,store的变量是一定会写入主存的,已经由jvm的内存一致性协议完成了数据的读取写入问题
再来谈谈原子性:
volatile:不能完全实现可见性,如果你的当前值以来与之前的值
锁:一定能实现原子性----》在多线程情况下是程序会被串行执行
(1)volatile 变量:实际的作用:告诉jvm,这个变量的值不能取cpu的cache中的,应为那个值可能已经过时了,从这个层面来讲,volatile已经实现了可见性,但是他并没有实现原子性,原子性说白了就是一堆代码要一起执行完,比如说x++,这个在jvm层面上是要几条语句。。。。
(2)锁:jvm自己实现了一套内存一致性协议,对于变量的读写是由顺序控制的,read,load,store的变量是一定会写入主存的,已经由jvm的内存一致性协议完成了数据的读取写入问题
再来谈谈原子性:
volatile:不能完全实现可见性,如果你的当前值以来与之前的值
锁:一定能实现原子性----》在多线程情况下是程序会被串行执行
相关文章推荐
- Java之多线程内存可见性_2(volatile不能保证原子性)
- Java并发_volatile实现可见性但不保证原子性
- Java并发_volatile实现可见性但不保证原子性
- Java多线程 之 原子性与可见性(八)
- JAVA原子性与可见性(一)
- java 并发概念与内存分析,原子性、可见性、有序性
- volatile实现可见性但不保证原子性
- volatile实现可见性但不保证原子性
- java中CAS算法保证原子性 无锁编程
- Java关键字volatile,原子性,变量可见性
- java中hashset是怎么保证内部只存放一份对象
- 精确解释java的volatile之可见性、原子性、有序性(通过汇编语言)
- java中volatile关键字的用法,它不能保证原子性操作
- Volatile 只保证可见性,并不保证原子性
- Java锁是如何保证数据可见性的 (本文未经过技术多方验证,仅供留存)
- 保证有序性、原子性、可见性
- Java多线程总结(5)— 原子性、可见性、有序性和并发库的原子性操作
- Java同步——可见性和原子性
- Java多线程 之 原子性与可见性(八)
- volatile 可以保证可见性,但不能保证原子性