线程内存和主内存之间联系

1, java多线程共享主内存中变量的时候,一共会经过几个阶段, 

  lock:将主内存中的变量锁定,为一个线程所独占。

  unclock:将lock加的锁定解除,此时其它的线程可以有机会访问此变量。

  read:将主内存中的变量值读到工作内存当中。

  load:将read读取的值保存到工作内存中的变量副本中。

  use:将值传递给线程的代码执行引擎。

  assign:将执行引擎处理返回的值重新赋值给变量副本。

  store:将变量副本的值存储到主内存中。

  write:将store存储的值写入到主内存的共享变量当中。 

所以线程操作共享变量的时候,都不是直接操作主内存中的变量,而是先把主内存中的变量copy一个副本到线程自己的栈中,然后做修改,修改好了会再次更新到主内存中。这中间经过很多的步骤,虽然线程内变量副本和主内存中变量做同步的时候也是加了锁的,但这只是对变量的读和写锁,并不能保证外面的业务计算线程安全,就带来了多线程访问数据不一致的问题,那么就要解决线程安全问题。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值