volatile 关键字的作用
1.修改即可见
2.防止指令重排
修改即可见
读取 volatile 修饰的对象时,每次都从主内存中读取值
修改 volatile 修饰的对象时,修改后立刻写入到主内存中
但是 volatile 无法保证原子性,多个线程可能同时读取了最新的值,都基于这个值在工作内存中进行修改,并在修改后同步至主内存中,案例如下图
防止重排的意义
以下图为例,当发生指令重排时,A线程获取到锁,开始创建对象,B线程判断对象已经不为空直接返回并使用,但实际对象并没有完成初始化,导致报错;volatile 字段的意义就在于禁止此处的指令进行重排
参考资料:
https://www.cnblogs.com/zhong...
https://www.miaokee.com/57027...
https://cloud.tencent.com/dev...
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。