一、volatile的作用:
在并发编程中,常见的问题是可见性、原子性和有序性的问题,常见的解决方案是通过synchronized关键字解决,但是synchronized比较重量级,对系统性能影响比较大,因此volatile关键字是另一种解决方案
二、volatile的使用场景:
1.防止重排序
大家都熟悉单例模式的实现,而在并发环境下的实现方式,我们通常可以采用双重检查加锁(Double check lock)的方式来实现
2.s实现可见性
可见性问题主要指一个线程修改了共享变量值,而另一个线程却看不到。引起可见性问题的主要原因是每个线程拥有自己的一个高速缓存区——线程工作内存。volatile关键字能有效的解决这个问题
三、volatile的原理
1.可见性实现
对volatile变量的写操作与普通变量的主要区别有两点:
(1)修改volatile变量时会强制将修改后的值刷新的主内存中。
(2)修改volatile变量后会导致其他线程工作内存中对应的变量值失效。因此,再读取该变量值的时候就需要重新从读取主内存中的值。
四、总结
总体来说,volatile是并发编程中的一种优化,在某些场景下可以代替Synchronized。但是,volatile的不能完全取代Synchronized的位置,只有在一些特殊的场景下,才能适用volatile。总的来说,必须同时满足下面两个条件才能保证在并发环境的线程安全:
(1)对变量的写操作不依赖于当前值。
(2)该变量没有包含在具有其他变量的不变式中。