Java并发之内存模型-JMM

本文深入探讨并发编程模型处理线程间通信与同步的机制,详细解析Java内存模型,包括通信方式、同步手段及其在Java中的实现。重点阐述了线程安全性问题以及Java中变量存储、实例域、静态域、数组元素的特点。进一步解释Java线程之间通过JMM进行通信与同步的过程,并用示意图直观展示通信与同步的步骤。最后,讨论编译器优化重排序的影响与volatile、synchronized关键词的作用。

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

1、总括
     并发编程模型主要处理两个问题:线程之间如何通信及线程之间如何同步。通信:线程之间以何种机制来交换信息;同步:程序用来控制不同线程之间操作发生相对顺序的机制。

     发生线程安全性的时机:
          变量存储在内存中,变量的计算是在CUP中。如果线程A要对变量a进行计算,需要经过三步:1)把变量a从内存中读取到CPU中,2)对变量a进行计算,3)把变量a写入到内存中。当线程A执行到第二步时,线程B也要对变量a进行计算,这时B从内存中读取到的值就是线程A写入到内存之前的值,脏数据就此产生了。

     在命令式编程中主要有两种通信机制:共享内存和消息传递。

2、共享内存的并发模型:
          通信:线程之间共享内存的公共状态,线程之间通过读-写内存中的共享状态来进行隐式通信。所谓隐式:线程什么时候可以读取共享状态对程序员来说是透明的。
          同步:程序员必须指定某段代码或某个方法必须在线程之间互斥执行。所以说同步是显式的。

3、消息传递的并发模型:
          通信:线程之间没有公共状态,所以线程直接必须明确的发送消息进行显式的通信
          同步:消息的发送必须在消息的接收之前,因此同步是隐式的。

4、JAVA
     Java的内存模型是共享内存,所以说Java的通信是隐式的,同步是显式的。

5、Java中,所有的实例域、静态域和数组元素都是存储堆中的,堆内存在线程之间是共享的。本地变量(存储在虚拟机栈的局部变量表中)、异常处理器参数不会在线程直接共享。
     另外:在JVM中,虚拟机栈、程序计数器、方法区存储的数据都是线程私有的。随线程而生,随线程而灭。

6、Java线程之间的通信由JMM控制,JMM决定了一个线程对共享变量的写入何时对另一个线程可见。JMM定义了线程和主内存之间的关系:线程之间的共享变量存储在主内存(main memory)中,每个线程都有一个私有的本地内存(Local memory),本地内存中存储了共享变量的副本。本地内存是JMM的一个抽象概念。

7、JMM抽象示意图
     如果线程A要和线程B通信,需要经过以下2个步骤:
            1)线程A把本地内存中的变量更新到主内存中
            2)线程B把主内存中的变量读取到本地内存中

8、下图描述上面两个步骤
本地线程A和B中都有主内存中共享变量的副本X。假设初始三个内存中的值都是0,线程A执行时把更新后X的值(假设是1)临时保存到本地内存中。如果A要和B通信,线程A会把本地内存中修改后的值刷新到主内存中。随后线程B到主内存中读取线程A更新后的X值,此时线程B的本地内存中X的值也是1了。


9、关键词
     编译器优化重排序,指令级并行的重排序、内存系统重排序、处理器重排序、内存屏障。

10、volatile\Synchronized 关键词会屏蔽重排序。

参考资料:infoq.com/深入理解JMM

































     

     
资源下载链接为: https://pan.quark.cn/s/9648a1f24758 这个HTML文件是一个专门设计的网页,适合在告白或纪念日这样的特殊时刻送给女朋友,给她带来惊喜。它通过HTML技术,将普通文字转化为富有情感和创意的表达方式,让数字媒体也能传递深情。HTML(HyperText Markup Language)是构建网页的基础语言,通过标签描述网页结构和内容,让浏览器正确展示页面。在这个特效网页中,开发者可能使用了HTML5的新特性,比如音频、视频、Canvas画布或WebGL图形,来提升视觉效果和交互体验。 原本这个文件可能是基于ASP.NET技术构建的,其扩展名是“.aspx”。ASP.NET是微软开发的一个服务器端Web应用程序框架,支持多种编程语言(如C#或VB.NET)来编写动态网页。但为了在本地直接运行,不依赖服务器,开发者将其转换为纯静态的HTML格式,只需浏览器即可打开查看。 在使用这个HTML特效页时,建议使用Internet Explorer(IE)浏览器,因为一些老的或特定的网页特效可能只在IE上表现正常,尤其是那些依赖ActiveX控件或IE特有功能的页面。不过,由于IE逐渐被淘汰,现代网页可能不再对其进行优化,因此在其他现代浏览器上运行可能会出现问题。 压缩包内的文件“yangyisen0713-7561403-biaobai(html版本)_1598430618”是经过压缩的HTML文件,可能包含图片、CSS样式表和JavaScript脚本等资源。用户需要先解压,然后在浏览器中打开HTML文件,就能看到预设的告白或纪念日特效。 这个项目展示了HTML作为动态和互动内容载体的强大能力,也提醒我们,尽管技术在进步,但有时复古的方式(如使用IE浏览器)仍能唤起怀旧之情。在准备类似的个性化礼物时,掌握基本的HTML和网页制作技巧非常
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值