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