src : 死磕Java并发:深入分析volatile的实现原理
简言之:一个变量如果用volatile修饰了,则Java可以确保所有线程看到这个变量的值是一致的,如果某个线程对volatile修饰的共享变量进行更新,那么其他线程可以立马看到这个更新,这就是所谓的线程可见性。
所以volatile是通过cpu指令,标记这个变量为share,从而使该变量被修改后,cpu的cache缓存行置为无效,需要重新读内存,保证可见性与其他线程的立即可见性
使用它必须满足如下两个条件:
- 对变量的写操作不依赖当前值;
- 该变量没有包含在具有其他变量的不变式中。
volatile经常用于两个两个场景:状态标记、double check