Java内存模型

发布时间 2023-09-25 15:33:44作者: 星流残阳

Java Memory Model,JMM是一种规范,定义了程序中各个变量的访问规则,以及在某个线程中对这些变量进行访问时需要遵守的同步策略,所以其目的是解决多线程正确执行的问题。

Java内存模型确保了多线程程序的可见性、有序性和原子性;主要内容包括:

  1. 主内存(Main Memory):所有变量都存储在主内存中,主内存是共享内存区域,所有线程都可以访问。
  2. 工作内存(Working Memory):每个线程都拥有自己的工作内存,保存了该线程使用到的变量的副本拷贝,线程只能读写自己的工作内存中的变量,不能直接访问主内存中的变量。
  3. 线程内表(Thread-Local Storage):每个线程都有一个私有的本地内存,称为线程内表,用于存储线程执行过程中的临时数据。
  4. 内存间交互操作:线程通过读取和写入操作与主内存进行交互。读操作将数据从主内存复制到工作内存,写操作将修改后的数据刷新到主内存中。
  5. volatile关键字:被volatile修饰的变量的值会在每次被线程访问时从主内存刷新,即直接从主内存中读取变量的值。
  6. 原子性(Atomicity):一个事务是一个不可分割的工作单位,事务中的一系列指令,要么全部执行成功,要么全部执行失败。JMM保证基本数据类型的读写操作不会被其他线程干扰,保证数据的完整性。
  7. 可见性(Visibility):JMM确保一个线程对共享变量的修改对其他线程可见。当一个线程修改了一个共享变量的值,其他线程能立即知道这个修改。即一个线程在工作内存中修改了数据后,必须将最新的数据刷新到主内存,以便其他线程可以读取到更新后的数据。
  8. 有序性(Ordering):JMM保证程序的执行顺序按照一定的规则进行,不会出现随机的重排序现象。