AdrianHu99 / NOTES

0 stars 0 forks source link

volatile关键字解析 #45

Closed AdrianHu99 closed 5 years ago

AdrianHu99 commented 5 years ago

https://mp.weixin.qq.com/s/TixFzi3JjXy0nQtviuVFOA

AdrianHu99 commented 5 years ago

1、对变量的写操作不依赖当前变量的值;

2、该变量没有包含在其他变量的不变式中。

AdrianHu99 commented 5 years ago

image 上面这段程序如果不加volatile的话会一直卡在循环,此时的线程拿到的值永远为false,加了volatile3秒后就输出stop,所以这段程序很好的解释了可见性的特点。

AdrianHu99 commented 5 years ago

像n++不是原子类的操作,其实可以通过synchronized对写方法锁住,再用volatile修饰变量,这样就保证了读线程对变量的可见性,又保证了变量的原子性。 image 如果n不加volatile,程序将一直循环,不能输出stop,也就是此时的线程拿到的值永远为0。当然不加volatile,对获取n的方法进行synchronized修饰也是能及时获取最新值的,但是性能会远低于volatile。