Java内存模型(Java Memory Model,JMM)是Java虚拟机(JVM)定义的一种规范,用于描述多线程程序中变量(包括实例字段、静态字段和数组元素)如何在内存中存储和传递的规则。规范了线程何时会从主内存中读取数据、何时会把数据写回主内存。
JMM的核心目标是确保多线程环境下的可见性、有序性和原子性,从而避免由于硬件和编译器优化带来的不一致问题。
- 可见性:确保一个线程对变量的修改,能及时被其他线程看到。关键字volatile就是用来保证可见性的,它强制线程每次读写时都直接从主内存中获取最新值。
- 有序性:指线程执行操作的顺序。JMM允许某些指令重排序以提高性能,但会保证线程内的操作顺序不会被破坏,并通过happens-before关系保证跨线程的有序性。
- 原子性:是指操作不可分割,线程不会在执行过程中被中断。例如,synchronized关键字能确保方法或代码块的原子性。