java既然volatile不能保证数据安全为何还要使用?
解决方法:
虽然volatile不能保证数据的原子性,至少可以保证了可见性和执行不重排。但如果加上cas(对比和交换)操作后就可以保证原子性了,原子类AtomicInteger就是这样保证原子性的。
一般在什么时候才使用volatile关键字呢?
● 写入变量值不依赖变量的当前值时,比如i++这种就是依赖旧的值。因为如果依赖当前值,将是获取—计算—写入三步操作,这三步操作不是原子性的,而volatile不保证原子性。
● 读写变量值时没有加锁。