什么是JMM

本文介绍了Java内存模型(JMM)及其在Java并发编程中的作用,包括主内存、线程本地内存的概念,以及原子性、可见性和有序性的规则。JMM通过同步机制确保线程安全,特别提到Volatile关键字在处理主内存值可见性的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

JMM(Java 内存模型)是 Java 平台定义的一种内存模型,它规定了 Java 程序中多线程并发访问共享内存的行为和规则。JMM 定义了线程如何与主内存和线程本地内存交互,以及如何通过同步机制来保证线程安全和可见性。

JMM 主要关注以下几个方面:

  1. 主内存(Main Memory):主内存是所有线程共享的内存区域,包含了所有的共享变量。所有的变量都存储在主内存中,线程之间可以通过读写共享变量来进行通信。

  2.  线程本地内存(Thread Local Memory):每个线程都有自己的线程本地内存,它包含了该线程使用到的变量的副本。线程在执行过程中,会把主内存中的共享变量拷贝到线程本地内存中进行操作,操作完成后再将结果刷新回主内存。

  3. 内存间的交互:JMM 定义了线程与主内存之间的交互规则。当一个线程对共享变量进行读操作时,必须先从主内存中获取最新的值;当一个线程对共享变量进行写操作时,必须将修改后的值刷新回主内存。这样可以保证不同线程之间对共享变量的操作是可见的。

  4. 原子性、可见性和有序性:JMM 定义了对共享变量的操作具备原子性、可见性和有序性。原子性指一个操作是不可中断的,要么全部执行成功,要么完全不执行;可见性指一个线程对共享变量的修改对其他线程是可见的;有序性指程序的执行结果与程序中的顺序一致。

JMM 通过使用同步机制(如 synchronizedvolatileLock 等)来保证线程之间的协调和同步,以及对共享变量的一致性访问。通过遵循 JMM 的规则,可以编写正确、高效且线程安全的多线程程序。

需要注意的是,JMM 只规定了程序中多线程访问共享内存的行为和规则,而不关注底层的硬件和操作系统的实现。具体的 JVM 实现会根据 JMM 的规范来定义内存模型的具体行为和实现细节。

 

八种操作: 

 

 

 

问题:程序不知道主内存的值已经被修改过了,所以需要引入Volatile 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小小懒懒

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值