【读书会第12期】对于jvm运行时数据区域,我做了一些更深层次的解读和理解
612
2022-05-30
Java内存模型
主内存与工作内存
每条线程还有自己的工作内存,线程的工作内存中保存了该线程使用的变量的主内存副本,线程对变量的所有操作都必须在工作内存中进行,而不能直接读写主内存中的数据。不同的线程之间也无法直接访问对方工作内存中的变量,线程将变量值的传递均需要通过主内存来完成,线程、主内存、工作内存三者的交互关系如下图
并发编程的三个概念
原子性:基本数据类型的访问、读写都是具备原子性的
可见性:是指当一个线程修改了共享变量的值时,其他线程能够立即得知这个改变。
有序性:如果在本线程内观察所有的线程都是有序的;如果在一个线程中观察另一个线程,所有的操作都是无序的。
指令重排:
为了提高程序运行效率、单线程下执行结果一致
Volidate
禁止进行指令重排序、保证修改的值会立即被更新到主存,当有其他线程需要读取时,它会去内存中读取新值
Happen-before原则
使用内核线程实现的方式也成为1:1实现。
使用用户线程实现的方式也成为1:N实现。
用户线程与轻量级进程之间M:N的关系
大大降低了整个进程被完全阻塞的方向,在这种混合模式中,用户线程与轻量级进程的数量比是不定的,是M:N的关系
协同式线程调度:线程的执行时间由线程本身来控制,线程把自己的工作执行完了之后,要主动通知系统切换到另一个线程上去。
抢占式线程调度:每个线程间由系统来分配执行时间,现成的切换不由线程本身来决定。
Java 任务调度
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。