`

可见性

 
阅读更多

 

1. 变量声明为 volatile:

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

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

 

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

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

 利用上面的特性:

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

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

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

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

     

     

 

2. synchronized 锁:

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

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

   即synchronized 保证了可见性。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics