【读书会第十二期】Java内存模型与线程

举报
蛋挞挞挞挞挞 发表于 2022/05/19 12:10:42 2022/05/19
【摘要】 并发处理的广泛应用是Amdahl定律替代摩尔定律成为计算机性能发展源动力的根本原因,也是人类压榨计算机运算能力的最有利武器。

Java内存模型

主内存与工作内存

每条线程还有自己的工作内存,线程的工作内存中保存了该线程使用的变量的主内存副本,线程对变量的所有操作都必须在工作内存中进行,而不能直接读写主内存中的数据。不同的线程之间也无法直接访问对方工作内存中的变量,线程将变量值的传递均需要通过主内存来完成,线程、主内存、工作内存三者的交互关系如下图

并发编程的三个概念

原子性:基本数据类型的访问、读写都是具备原子性的

可见性:是指当一个线程修改了共享变量的值时,其他线程能够立即得知这个改变。

有序性:如果在本线程内观察所有的线程都是有序的;如果在一个线程中观察另一个线程,所有的操作都是无序的。

指令重排:

为了提高程序运行效率、单线程下执行结果一致

Volidate

禁止进行指令重排序、保证修改的值会立即被更新到主存,当有其他线程需要读取时,它会去内存中读取新值

Happen-before原则

使用内核线程实现的方式也成为1:1实现。

使用用户线程实现的方式也成为1:N实现。

用户线程与轻量级进程之间M:N的关系

大大降低了整个进程被完全阻塞的方向,在这种混合模式中,用户线程与轻量级进程的数量比是不定的,是M:N的关系

协同式线程调度:线程的执行时间由线程本身来控制,线程把自己的工作执行完了之后,要主动通知系统切换到另一个线程上去。

抢占式线程调度:每个线程间由系统来分配执行时间,现成的切换不由线程本身来决定。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。