Java内存模型(Java并发编程的艺术整理)

内存模型基础

并发模型的两个关键问题

在并发编程中,需要处理两个关键问题:线程之间如何通信及线程之间如何同步

通信是指线程之间以何种机制来交换信息。在命令是编程中,线程之间的通信机制由了两种:共享内存消息传递

共享内存的并发模型里,线程之间共享程序的公共状态,通过写-读内存中的公共状态进行隐式通信。在消息传递的并发模型里,线程之间没有公告状态,线程之间必须通过发送消息来显示进行通信。

同步是指程序中用于控制不同线程间操作发生相对顺序的机制。在共享内存并发模型里,同步时显示进行的。程序员必须显示指定某个方法或某段代码需要在线程之间互斥执行。在消息传递的并发模型里,由于消息的发送必须在消息的接受之前,因此同步时隐式进行的。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
在这里插入图片描述
Java的并发采用的时共享内存模型,Java线程之间的通信总是隐式进行的,整个通信过程必须显示的指定。

Java内存模型的抽象概念

在java中,所有的实例域,静态域和数组元素都存储在堆内存中,对内存在线程之间共享。局部变量,方法定义参数和异常处理器参数不会在线程之间共享。

Java线程之间的通信由Java内存模型(JMM)控制,JMM决定一个线程对共享变量的写入何时对另一个线程可见。

JMM定义了线程和主内存之间的抽象关系:线程之间的共享变量存储在主内存中,每个线程都会有一个私有的本地内存,本地内存中存储了该线程以读/写共享变量的副本。

内存屏障类型

为了保证内存可见性,Java编译器在生成指令序列的适当位置会插入内存屏障指令来禁止特定类型处理器重排序,

屏障类型指令示例说明
LoadLoad BarriersLoad1;LoadLoad;Load2确保Load1数据的装载先于Load2及所有后续装在命令的装载
StoreStore BarriersStore1;StoreStore;Store2确保Store1数据对于其他处理可见(刷新到内存)先于Store2及所有后续存储指令的存储
LoadStroe BarriersLoad1;LoadStroe;Stroe2确保Load1数据装载优先于Stroe2及所有后续的存储指令刷新到内存
StroeLoad BarriersStroe1;StroeLoad;Load2确保Stroe1数据对其他处理器变得可见优先于Load2及所有后续装载指令的装载。StroeLoad Barriers 会事该屏障之前所有内存访问指令完成之后,才执行该屏障之后的内存访问指令

happens-before

从JDK 5 开始,Java使用心得JSR-133内存模型。JSR-133使用happens-berore的概念来阐述操作之间的内存可见性。在JMM中,如果一个操作执行的结果需要对另一个操作可见,那么这两个操作就存在Happens-before关系。

程序顺序规则:一个线程中的每个操作,Happens-before于该线程中的任意后续操作
监视器锁规则:对一个锁的解锁,happens-before于随后对这个锁的加锁。
volatile变量规则:对一个volatile域的写,happens-before 于任意后续对这个volatile域的读。
传递性:如果A happens-before B,且B happens-before C ,那么A happens-before C

重排序

重排序是指编译器和处理器为了优化程序性能而对指令序列重新排序的一种手段

as-if-serial

as-if-serial的意识:不管怎样重排序,线程的执行结果是不能被改变的。编译器,runtime和处理器都必须遵守as-if-serial。
参考书籍:
《Java并发编程的艺术》

1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看REAdMe.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看REAdMe.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看READme.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值