-
JAVA内存模型

以下是关于 Java内存模型(JMM) 的核心要点总结:
一、JMM的核心作用
Java内存模型是 **多线程环境下内存访问的规范**,主要解决以下问题:
-
可见性:线程对共享变量的修改对其他线程立即可见(避免CPU缓存不一致)。
-
原子性:确保指令执行不受线程切换影响(如
volatile、synchronized或原子类)。 -
有序性:防止CPU指令重排序(通过内存屏障实现)。
二、JMM的内存结构
| 组件 | 作用 |
| 主内存 | 存储所有共享变量(线程间可见)。 |
| 工作内存 | 线程私有,存储主内存变量的副本(操作完成后同步回主内存)。 |
三、关键实现机制
-
内存屏障分为
LoadLoad、StoreStore、LoadStore、StoreLoad四类,用于禁止特定类型的指令重排序。 -
happens-before规则保证操作的顺序性,例如:
-
程序顺序规则
-
volatile变量的写操作优先于读操作 -
锁的释放优先于获取
-
-
volatile关键字
-
强制从主内存读写变量,禁用缓存优化。
-
禁止指令重排序(类似内存屏障)。
-
四、并发编程实践
| 场景 | 解决方案 |
| 线程安全计数器 | 使用 |
| 单例模式 | 双重检查锁中需用 |
| 状态标志控制 |
