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

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

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

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

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

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

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

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

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

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

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

 

 

你可能感兴趣的:(java thread)