1, java多线程共享主内存中变量的时候,一共会经过几个阶段,
lock:将主内存中的变量锁定,为一个线程所独占。
unclock:将lock加的锁定解除,此时其它的线程可以有机会访问此变量。
read:将主内存中的变量值读到工作内存当中。
load:将read读取的值保存到工作内存中的变量副本中。
use:将值传递给线程的代码执行引擎。
assign:将执行引擎处理返回的值重新赋值给变量副本。
store:将变量副本的值存储到主内存中。
write:将store存储的值写入到主内存的共享变量当中。
所以线程操作共享变量的时候,都不是直接操作主内存中的变量,而是先把主内存中的变量copy一个副本到线程自己的栈中,然后做修改,修改好了会再次更新到主内存中。这中间经过很多的步骤,虽然线程内变量副本和主内存中变量做同步的时候也是加了锁的,但这只是对变量的读和写锁,并不能保证外面的业务计算线程安全,就带来了多线程访问数据不一致的问题,那么就要解决线程安全问题。
本文详细解析了Java多线程环境下,线程如何通过多个阶段来操作共享变量,包括锁定、解锁、读取、加载等步骤。由于线程间的变量副本与主内存同步过程中的复杂性,容易导致数据不一致性问题,因此需要特别关注线程安全性。
795

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



