volatile
volatile
常常与 synchronized
作比较,简单的说,synchronized 具有互斥性
& 可见性
,而volatile 仅有可见性
;可见性保证了线程间更新了之后其他线程可以马上发现更新的值。但是,volatile并不能保证多线程下变量操作的原子性。所以类似i++或者long类型的操作等,如果在volatile修饰的field上面,依然会产生脏数据。
要保证原子性,可以使用volatile + CAS的实现方式。
以下出自方腾飞《聊聊并发(一)深入分析Volatile的实现原理》
使用volatile变量修饰符如果使用恰当的话,它比synchronized的使用和执行成本会更低,因为它不会引起线程上下文的切换和调度。
而这些都是Java内存模型保证的。