JAVA内存模型(一)
1、JMM(java内存模型)
操作内存共享变量与CPU工作缓存之间的原子操作
read(读取):从主内存读取数据
load(加载):从主内存加载数据
use(使用):从工作内存读取数据计算
assign(赋值):将计算结果赋值到主内存
store(存储):将工作内存写入主内存
lock(锁):将主内存变量加锁,标识为独占状态
unlock(解锁):将主内存变量解锁
2、volatile关键字
早期使用(总线加锁)方式来同步不同线程的共享变量
对读取的共享变量进行lock,此时其他线程无法read该变量,将并行执行变为串行执行,性能低下
MESI缓存
通过CPU的总线嗅探机制(监听)进行数据的同步,在线程对共享变量赋值后,立即同步到主内存,而不是线程结束后才同步到主
内存,将另一线程的共享变量置为失效。
3、volatile底层原理:
通过对assign操作lock,并使用MESI缓存机制实现