🍏JMM-八大原子操作-3D版
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 大原子操作,本质就是:
规定主内存与工作内存之间如何安全地交换数据。
Comments




