并发编程-内存模型(JMM)

并发编程中的两个关键问题

线程之间如何通信及线程之间如何同步。

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

同步是指程序中用于控制不同线程间操作发生相对顺序的机制。

java内存模型的抽象结构

所有实例域,静态域和数组元素都储存在堆内存中,堆内存在线程之间共享,局部变量方法定义参数和异常处理参数不会在线程之间共享,他们不会有内存可见性问题,也不会受内存模型的影响。

本地内存是JMM的一个抽象概念,并不真实存在。(就是说一个线程操作主内存中的数据时,会把主内存中的数据拷贝一份到本地内存,线程操作的是本地内存中的数据)

并发编程模型的分类

现代处理器使用写缓冲区(类似于本地内存)临时保存向内存写入的数据。写缓冲区可以保证指令流水线持续运行,他可以避免由于处理器停顿下来等待向内存写入数据而产生的延迟。由于写缓冲区的存在,处理器对内存的读/写操作的执行顺序,不一定与内心实际发生的读/写顺序一致!

看下面一个例子
在这里插入图片描述

假设处理器A和处理器B按程序顺序并行执行内存访问,最终可以得到x=y=0 这个结果。
在这里插入图片描述
上面的过程中a=1是写操作,x=b是读操作,这两个操作在上图中是A1和A2过程,这两个过程的执行顺序在我们为您看来是A1到A2但实际执行过程中是会发生重排序的,处理器B中的执行过程也是同理。所以当执行完A2后切换到处理器B执行了B2就会出现x=y=0这种结果

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值