Java内存模型的抽象示意图:

在Java中,所有的对象域,静态域以及数组元素都存放在堆内存中,堆内存在各个线程之间共享,为主内存。
从上图看,线程A如果要和线程B之间要通信的话,要经过如下几个步骤:
- 线程A先将本地
工作内存A中变更过的变量更新到主内存中去。 - 线程B到主内存中去读取线程A之前更新过的
共享变量

本地内存A和本地内存B有主内存中的共享变量x的副本,当线程A执行完毕后,更新x的值为1,临时存放在自己的本地内存中,线程A和线程B需要通信的时候,线程A首先会把自己本地内存中修改后的x值更新到主内存中,此时主内存中的x值变为1了,随后,线程B到主内存中读取线程A更新后的x值,此时线程B的本地内存x值也就变为1了
小结:
由上图可知:线程间的通信过程必须要经过主内存。
参考:
《Java并发编程的艺术》
本文深入解析Java内存模型,阐述了对象域、静态域及数组元素如何存放于共享的堆内存中,即主内存。详细说明了线程间通过主内存进行通信的过程,包括线程如何更新和读取主内存中的共享变量。
1050

被折叠的 条评论
为什么被折叠?



