volatile 关键字

volatile 关键字的作用

1.修改即可见
2.防止指令重排

修改即可见

读取 volatile 修饰的对象时,每次都从主内存中读取值
修改 volatile 修饰的对象时,修改后立刻写入到主内存中
但是 volatile 无法保证原子性,多个线程可能同时读取了最新的值,都基于这个值在工作内存中进行修改,并在修改后同步至主内存中,案例如下图
volatile 关键字_第1张图片

防止重排的意义

以下图为例,当发生指令重排时,A线程获取到锁,开始创建对象,B线程判断对象已经不为空直接返回并使用,但实际对象并没有完成初始化,导致报错;volatile 字段的意义就在于禁止此处的指令进行重排
volatile 关键字_第2张图片

参考资料:
https://www.cnblogs.com/zhong...
https://www.miaokee.com/57027...
https://cloud.tencent.com/dev...

你可能感兴趣的:(java)