1.volatile关键字的作用
1)保证可见性:我称之为保证立即可见性,即不同线程在使用volatile修饰的变量前都会立即获取其最新值,修改后都会立即更新其最新值。
2)禁止指令重排序:JVM虚拟机允许对变量的创建地址,赋值,指向三个操作进行顺序优化,但是在多线程场景中这样可能会导致错误,volatile禁止虚拟机在运行时进行这种优化。
2.volatile是否是安全的
不安全,虽然保证可见性保证了变量立即更新,但是对于非原子性的操作,如i++,是不能保证每一步都立即更新的。
3.volatile什么时候是安全的
只读不写,或者保证只有一个线程写