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

网友投稿 566 2022-05-30

Java内存模型

主内存与工作内存

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

并发编程的三个概念

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

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

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

指令重排:

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

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

Volidate

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

Happen-before原则

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

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

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

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

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

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

Java 任务调度

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:【第11篇】微软发布的Dynamic Head,创造COCO新记录:60.6AP
下一篇:张小白使用CentOS 7.9源码编译openGauss 2.0.0企业版的试验日记
相关文章