如何理解volatile关键字
变量对所有线程总是可⻅的
-
保证被volatile修饰的共享变量对所有线程总是可⻅的,也就是当⼀个线程修改了⼀个被volatile修饰共享变量的值,新值总是可以被其他线程⽴即得知。
- 因为cpu执行一般来说是
有缓存的
,一级二级三级缓存之后才到真正的内存 - 对一个变量进行修改,会先走一级 -> 二级 -> 三级再到内存的步骤
- 所以不会直接修改到内存的值
- 如果要
⽴即看到值的修改
就禁用缓存
或者跳过缓存
直接修改内存中的数据
- 因为cpu执行一般来说是
-
volatile
可以简单的理解为,对这个关键字修饰的变量,会直接修改内存中的值,会直接读取内存中的值
,不会经过缓存 -
使⽤volatile关键字会
强制将修改的值⽴即写⼊主存
;
禁⽌指令重排序优化
- JVM 存在指令重排,
volatile
关键字可以使程序严格按照代码的先后顺序执行
。 - 听说是会指令重排,但是我对这个不大了解,只知道会改变代码顺序
- 而使用了
volatile
关键字的变量的一些操作就不会出现指令重排