JMM是Java Memory Model(Java 内存模型)的缩写,是Java虚拟机规范中定义的一套规则,用来规范Java程序在多线程环境下的内存访问方式。其主要作用是保证多线程之间的数据可见性、有序性和原子性。JMM规范定义了一些程序员和JVM实现者需要遵守的规则,以确保程序在多线程环境下能够正确运行。
以下是JMM规范中的一些基本概念:
-
主内存与工作内存:Java内存模型中有一个主内存(Main Memory),所有线程都可以访问它。每个线程还有自己的工作内存(Working Memory),工作内存中存储了主内存中的一部分内容。
-
内存访问操作:在Java中,对共享变量的读写操作都会涉及到内存访问操作。内存访问操作包括读取变量值、写入变量值和锁定/解锁变量。
-
Happens-Before规则:JMM规范中定义了一种 Happens-Before 关系,用于描述内存访问操作间的先后顺序。如果一个操作 Happens-Before 另一个操作,那么第一个操作对共享变量的更新对于第二个操作是可见的。
-
volatile:volatile是Java关键字,可用于修饰变量。被volatile修饰的变量会遵循一定的内存可见性原则,任何一个线程对该变量的修改都会立即刷新到主内存中。
-
synchronized:synchronized关键字用于实现线程的同步。它可以保证多个线程对同一共享变量的操作是有序的,并且在多线程环境下保证共享变量的可见性和操作的原子性。
总之,JMM规范是Java多线程编程的基石,对于Java程序员来说是非常重要的。程序员需要遵守JMM规范,才能编写出正确高效的多线程程序。
https://mp.weixin.qq.com/s?__biz=MzU0OTE4MzYzMw==&mid=2247533850&idx=4&sn=7477c8346a738e9a234c3b85f1cd0bc4&chksm=fbb1cce4ccc645f238e66ee5d45c9aa85c51f47987a8719e035b51ec8d49c75457b18a1dfae3&scene=27