线程内存和主内存之间联系 java thread
程序员文章站
2022-04-30 18:12:30
...
1, java多线程共享主内存中变量的时候,一共会经过几个阶段,
lock:将主内存中的变量锁定,为一个线程所独占。
unclock:将lock加的锁定解除,此时其它的线程可以有机会访问此变量。
read:将主内存中的变量值读到工作内存当中。
load:将read读取的值保存到工作内存中的变量副本中。
use:将值传递给线程的代码执行引擎。
assign:将执行引擎处理返回的值重新赋值给变量副本。
store:将变量副本的值存储到主内存中。
write:将store存储的值写入到主内存的共享变量当中。
所以线程操作共享变量的时候,都不是直接操作主内存中的变量,而是先把主内存中的变量copy一个副本到线程自己的栈中,然后做修改,修改好了会再次更新到主内存中。这中间经过很多的步骤,虽然线程内变量副本和主内存中变量做同步的时候也是加了锁的,但这只是对变量的读和写锁,并不能保证外面的业务计算线程安全,就带来了多线程访问数据不一致的问题,那么就要解决线程安全问题。
上一篇: Yum命令