【读书会第十二期】Java内存模型与线程
【摘要】 并发处理的广泛应用是Amdahl定律替代摩尔定律成为计算机性能发展源动力的根本原因,也是人类压榨计算机运算能力的最有利武器。
Java内存模型
主内存与工作内存
每条线程还有自己的工作内存,线程的工作内存中保存了该线程使用的变量的主内存副本,线程对变量的所有操作都必须在工作内存中进行,而不能直接读写主内存中的数据。不同的线程之间也无法直接访问对方工作内存中的变量,线程将变量值的传递均需要通过主内存来完成,线程、主内存、工作内存三者的交互关系如下图
并发编程的三个概念
原子性:基本数据类型的访问、读写都是具备原子性的
可见性:是指当一个线程修改了共享变量的值时,其他线程能够立即得知这个改变。
有序性:如果在本线程内观察所有的线程都是有序的;如果在一个线程中观察另一个线程,所有的操作都是无序的。
指令重排:
为了提高程序运行效率、单线程下执行结果一致
Volidate
禁止进行指令重排序、保证修改的值会立即被更新到主存,当有其他线程需要读取时,它会去内存中读取新值
Happen-before原则
使用内核线程实现的方式也成为1:1实现。
使用用户线程实现的方式也成为1:N实现。
用户线程与轻量级进程之间M:N的关系
大大降低了整个进程被完全阻塞的方向,在这种混合模式中,用户线程与轻量级进程的数量比是不定的,是M:N的关系
协同式线程调度:线程的执行时间由线程本身来控制,线程把自己的工作执行完了之后,要主动通知系统切换到另一个线程上去。
抢占式线程调度:每个线程间由系统来分配执行时间,现成的切换不由线程本身来决定。
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)