volatile关键字主要有三方面作用:
1,实现long/double类型变量的原子操作
2,防止指令重排序
3,实现变量的可见性
当使用volatile修饰变量时,应用就不会从寄存器中获取该变量的值,而是从内存(高速缓存)中获取
它和锁类似的地方有两点:
1,防止指令重排序
2,实现变量的可见性
对于volatile关键字变量的读写操作,本质上都是通过内存屏障来执行的,内存屏障兼具了两方面能力:
1,防止指令重排序
2,实现变量的可见性
1,对于读取操作来说,volatile可以确保该操作与其后续的所有读写操作都不会进行指令重排序
2,对于修改操作来说,volatile可以确保该操作与其上面的所有读写操作都不会进行指令重排序