笔者最近在学习Java并发编程的相关知识,想必是最先接触了volatile关键字volatile保证了对于共享数据的最新可见性,强制线程去内存中读数据,而不是从缓存中拿数据,且对于volatile关键字修饰的变量,对此种变量读/写具有原子性。
由于volatile会锁总线或者锁缓存行,这样会带来性能上的损失。著名的并发编程大师Doug lea 使用了填充缓存行的方法,降低锁缓存行带来的影响。
但对于volatile修饰的变量进行不是原子性操作,例如自增自减,线程若是并发修改数据,则结果不可预期,这时可以采用原子类代替volatile。
对于volatile写会插入loadstore屏障和storeload屏障,禁止指令重排序。