volatile

java中的关键字,可保证并发编程中的可见性和有序性,不能保证原子性。

不能保证原子性的原因:
java中只有对基本类型变量的赋值和读取是原子操作,比如 i=1。但是像 j=i 或者 i++ 这样的操作都不是原子操作,因为它们都进行了多次原子操作,比如 i++ 分为 i+1, 然后再重新赋值给 i。两个原子操作加起来就不是原子操作了。所以,如果一个变量被volatile修饰了,那么肯定可以保证每次读取这个变量值的时候得到的值都是最新的,但是一旦需要对变量进行自增这样的非原子操作,就不会保证这个变量的原子性了。

参考文档

volatile有序性和可见性底层原理

JMM模型(内存模型)、总线锁、缓存锁

posted on 2022-03-14 15:48  哑吧  阅读(24)  评论(0编辑  收藏  举报