JMM 的 8 大原子操作

JMM 不复杂,它只是规定:
线程什么时候能读、什么时候能写、什么时候必须同步。


一、为什么会有“原子操作”

在 JMM 中:

  • 主内存:共享数据的唯一权威
  • 工作内存:线程自己的变量副本

线程不能直接操作主内存,
所有读写都要被拆解成一组 标准动作

这组动作,就是 8 大原子操作


二、8 大原子操作(按实际使用顺序)

1️⃣ read(读取)

主内存 读取变量的值。

只是“读出来”,还没给线程用。


2️⃣ load(载入)

把 read 得到的值,放入线程的 工作内存

read + load 必须成对出现。


3️⃣ use(使用)

线程在执行过程中 真正使用变量

if、while、计算,全发生在这一步。


4️⃣ assign(赋值)

线程给变量 赋新值
但只修改 工作内存中的副本

主内存此时还不知道。


5️⃣ store(存储)

把工作内存中的新值,
准备写回 主内存。

还没真正生效。


6️⃣ write(写入)

把 store 准备好的值,
真正写入主内存

到这一步,其他线程才有机会看到新值。


7️⃣ lock(加锁)

锁定主内存中的变量,
防止其他线程同时修改。

synchronized 的底层语义之一。


8️⃣ unlock(解锁)

释放锁。

解锁前,必须先把修改写回主内存。


三、一次完整的变量操作流程

不加锁:

1
read → load → use → assign → store → write

加锁:

1
lock → read → load → use → assign → store → write → unlock

JMM 只认这些流程。


四、一句话总结

8 大原子操作,本质就是:
规定主内存与工作内存之间如何安全地交换数据。