一、JMM 简介
1、Java内存模型(Java Memory Model,JMM)是Java虚拟机定义的内存访问规范,用于屏蔽底层硬件和操作系统的内存访问差异,达到内存访问一致性的目的
2、解决多线程环境下共享变量的可见性、原子性和有序性问题,规定了共享变量如何在多线程之间共享。一个线程如何、什么时候可以看到由其他线程修改过后的共享变量的值
二、JMM 核心概念
1、主内存和工作内存
【主内存】:是JMM定义的一个存储区域,用于存储Java程序中的共享变量
【工作内存】:每个线程独有的一个存储区域,用于存储线程私有数据和共享变量的副本。各线程不能直接访问对方的工作内存,必须通过主内存进行通信
三、JMM 关键特性
1、可见性:一个线程对共享变量的修改,能够及时地被其他线程看到。JMM通过规定主内存与工作内存之间的交互操作,使用 volatile 修饰共享变量确保变量的可见性
2、有序性:Java程序在执行时,可能会出现指令重排序的现象。JMM通过规定 happens-before 规则,来确保程序执行的有序性
3、原子性:一个操作要么全部执行成功,要么全部不执行。JMM通过提供 synchronized 等同步机制,来确保操作的原子性