乐趣区

关于java:volatile

volatile 关键字的作用

1. 批改即可见
2. 避免指令重排

批改即可见

读取 volatile 润饰的对象时,每次都从主内存中读取值
批改 volatile 润饰的对象时,批改后立即写入到主内存中
然而 volatile 无奈保障原子性,多个线程可能同时读取了最新的值,都基于这个值在工作内存中进行批改,并在批改后同步至主内存中,案例如下图

避免重排的意义

以下图为例,当产生指令重排时,A 线程获取到锁,开始创建对象,B 线程判断对象曾经不为空间接返回并应用,但理论对象并没有实现初始化,导致报错;volatile 字段的意义就在于禁止此处的指令进行重排

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

退出移动版