Java JMM内存模型、volatile的作用
2021-03-20 17:55:21 0 举报
Java JMM内存模型、volatile的作用
作者其他创作
大纲/内容
initFlag=false
assign
CPU
CPU寄存器
工作内存
unlock
线程1正常监听到线程2对initFlag的变更
volatile initFlag=false(失效)
write
store
initFlag=false--> true
汇编 lock前缀指令1、立刻回写RAM2、触发MESI协议
read
load
cpu总线嗅探机制
参数变动缓存失效
use
线程1(initFlag=true)
主内存(RAM)
线程1无法监听到线程2对initFlag的变更
initFlag=true
说明:CPU运算效率胜于主存CPU主要基于CPU寄存器、CPU缓存进行运算
initFlag=false --> true
重新从RAM获取数据
总线(MESI缓存一致性协议)
volatile initFlag=false--> true
计算机硬件内存架构简图
线程1(监听innitFlag)
volatile initFlag=false --> true
JMM原子操作:lock(锁定):作用于主内存,它把一个变量标记为一条线程独占状态;read(读取):作用于主内存,它把变量值从主内存传送到线程的工作内存中,以便随后的load动作使用;load(载入):作用于工作内存,它把read操作的值放入工作内存中的变量副本中;use(使用):作用于工作内存,它把工作内存中的值传递给执行引擎,每当虚拟机遇到一个需要使用这个变量的指令时候,将会执行这个动作;assign(赋值):作用于工作内存,它把从执行引擎获取的值赋值给工作内存中的变量,每当虚拟机遇到一个给变量赋值的指令时候,执行该操作;store(存储):作用于工作内存,它把工作内存中的一个变量传送给主内存中,以备随后的write操作使用;write(写入):作用于主内存,它把store传送值放到主内存中的变量中。unlock(解锁):作用于主内存,它将一个处于锁定状态的变量释放出来,释放后的变量才能够被其他线程锁定;
volatile作用说明:能保证可见性和有序性,但无法保证原子性
CPU缓存
JMM运行模型
volatile作用图解
lock
0 条评论
下一页