可见性

 

1. 变量声明为 volatile:

           读时:每次都从主内存中读取最新的变量值到工作内存,再进行操作。

           写时:每次写操作都把变量值及时同步到主内存中,以使其它线程及时可见。

 

  当读一个volatile变量时,JMM会把线程对应的本地内存置为无效,线程接下来将从主内存中读取共享变量

     当写一个volatile变量时,JMM会把线程对应的本地内存中的共享变量值刷新到主内存

 利用上面的特性:

    在一个代码块开始:读volatile变量,清空工作内存

    在一人代码块中间:开始某些共享变量的操作,--从主内存读取

    在一个代码块结束:写volatile变量,工作区内存写回主存。

  ---可以实现线程间的可见性,如 Reentrantlock。 

     

     

 

2. synchronized 锁:

    进入synchronized代码块:使用的变量都从主内存中读取到工作内存在再操作。

   退出synchronized代码块:变更的变量值都 刷回主内存。 

   即synchronized 保证了可见性。

猜你喜欢

转载自java12345678.iteye.com/blog/2390691