Java多线程学习之路(1) -- 内存可见性

什么叫内存可见性
     一个线程对共享变量值的修改,能够及时的被其他线程看到。
什么又叫共享变量
     如果一个变量在多个线程的工作内存中都存在副本,那么这个变量就是这几个线程的共享变量
     Java中,所有例域、静域和数元素都存在堆内存中,堆内存在线程之共享。
    局部量(Local Variables),方法定参数和异常理器参数(不会在线程之共享,它不会有内存可问题,也不受内存模型的影 响 
     对于Java内存模型,线程间的共享变量存储在主内存中,不同线程会在本地内存中,各自创建共享变量的副本。
直白点就是,两个线程A和B进行通信时,线程会在本地对变量x进行操作,操作后会将更新后的值刷新到主存,线程B再从主存中读取x的值,并更新到本地内存。
 
 
 以下内容是对这句话的详解
Java线程之的通信由Java内存模型(本文JMM)控制,JMM决定一个线共享量的写入何时对另一个线程可。从抽象的角度来看,
JMM线程和主内存之的抽象关系:线程之的共享量存在主内存(Main Memory)中,每个线程都有一个私有的本地内存(Local Memory),
本地内存中存该线程以/写共享量的副本。本地内存是JMM的一个抽象概念,并不真存在。它涵盖了存、写冲区、寄存器以及其他的硬件和编译
化。Java内存模型的抽象示意如3-1所示。

 


3-1来看,如果线A线B要通信的,必经历下面2个步
1线A把本地内存A中更新的共享量刷新到主内存中去。
2线B到主内存中去线A之前已更新的共享量。
下面通示意见图3-2)来两个步
内存可见性

3-2所示,本地内存A和本地内存B由主内存中共享x的副本。假初始3
内存中的x0线A,把更新后的x(假设值为1临时存放在自己的本地内存
A中。当线A线B需要通信线A首先会把自己本地内存中修改后的x刷新到主内
存中,此主内存中的x值变为1。随后,线B到主内存中去线A更新后的x,此
线B的本地内存的x变为1
从整体来看,两个步骤实质上是线A在向线B送消息,而且个通信程必
经过主内存。JMM控制主内存与每个线程的本地内存之的交互,来Java程序提供
内存可性保
 
 
参考资料-- java并发编程的艺术

转载于:https://www.cnblogs.com/coisini/p/9687798.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值