1.volatile关键字往往用于多线程,保证了线程可以正确读取其他线程传入的值。
2.volatile的特殊规则保证了volatile变量值修改后的新值立刻同步到主内存,每次使用volatile变量前立即从主内存中刷新,因此volatile保证了多线程之间的操作变量的可见性,而普通变量则不能保证这一点
3.volatile变量规则(Volatile Variable Rule):对一个volatile变量的写操作先行发生于后面对这个变量的读取操作,这里的”后面“同样指时间上的先后顺序。
volatile:保证可见性,不保证原子性
通过加入内存屏障和禁止重排序优化来实现的
对volatile变量执行写操作时,会在写操作后加入一条store屏障
对volatile变量执行读操作时,会在读操作前加入一条load屏障
volatile适用场景
多线程中安全的使用volatile变量,必须同时满足:
1.对变量的写入操作不依赖其当前值
不满足:number++、count=count*5等
满 足:boolean变量、记录温度变化的变量等
2. 该变量没有包含其在具有其他变量的不变式中
不满足:不变式low<up