温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

什么是线程内存模型

发布时间:2021-10-14 16:08:50 来源:亿速云 阅读:129 作者:iii 栏目:大数据

本篇内容介绍了“什么是线程内存模型”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

1.内存模型图的思维转换

什么是线程内存模型

JVM定义了Java的虚拟内存模型,跟C/C++不一样的是,虚拟内存将物理内存划分了不同的区域,而C/C++是直接映射物理内存的。

笼统的来说,jvm一般将内存分为栈和堆,栈用来存储静态方法和静态变量,而堆用来存储对象和普通变量。

但是如果从线程的角度,内存模型会变成下图的样子

什么是线程内存模型

在这个模型中,变量是在主内存中的,线程各自有各自的工作内存,不会出现相互干扰。

工作内存通过跟主内存之间的操作,实现变量数据的交换共享。而线程工作内存是相互隔离的。这样各线程工作的时候不会对其他线程的工作数据产生影响

2.实例解析线程内存模型

什么是线程内存模型

如上图所示,左边是一个简单的卖票程序,右边是程序加载的内存模型,当程序通过类加载器加载到方法区后,在栈中建立的main方法的线程,创建了Tiecket t 的变量后,会在堆中建立该对象的成员变量tickets和方法

什么是线程内存模型

当在main方法中创建窗口1和窗口1线程后,每个线程都会有独立的栈内存空间,而这些栈内存共享相同的变量tickets

什么是线程内存模型

3.工作内存和主内存之间的操作(单个线程)

两块内存有8种操作。

  1. (lock - unlock) lock将一个主内存变量标记成线程独占,unlock将独占的变量释放

  2. (read - load)read 将主内存的变量读取到CPU中,load操作将read到的变量存入到工作内存中,一定会成对出现

  3. (use - assign) use将工作内存中的变量传递给执行的代码中,当代码需要使用变量值的字节码时,需要这个操作。 assign 赋值操作,将代码中赋值指令出现时,把收到的变量赋值到工作内存中

  4. (store - write) store 将工作内存的变量传送回主内存,但是只是传送,write操作才会将值写入到主内存。而且这两个一定会成对出现


  • read load ; store write只能成对操作,不能出现只读不用,只返回不存储

  • 不允许线程丢弃assign操作,用完的变量一定会传回主内存,也不允许将未assign的变量从工作内存写回主内存

  • 变量只能从主内存中创建,未初始化的变量线程不能load 或 assign

  • 变量只能被一条线程lock,而且可以lock很多次,必须执行相应条数的unlock才会被释放

  • 线程只能unlock自己lock的变量,未被lock的变量不能执行unlock,不允许unlock其他线程lock的变量

  • lock变量操作会将工作内存的变量清空,使用这个变量时,相应使用这个变量时,需要重新load 和assign

  • unlock 前,变量会被重新写入主内存

“什么是线程内存模型”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注亿速云网站,小编将为大家输出更多高质量的实用文章!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI