关键字是Java虚拟机提供的最轻量级的同步机制
当一个变量定义为volatile之后,它具有两种特性:
- 保证此变量对所有线程的可见性:当一条线程修改了这个变量的值时,新值能立即同步到主内存中,因此其他线程可以立即得知该变量修改后的值。
在以下两种情况下能保证线程的安全性,其余情况我们仍要通过加锁来保证原子性:
- 运行结果并不依赖变量的当前值,或者能够确保只有单一的线程修改变量的值
- 变量不需要与其他状态变量共同参与不变约束
如果不满足以上两种场景,我们就要选择所来保证原子性
2.禁止指令重排序优化
普通的变量仅仅会保证在该方法的执行过程中所有依赖赋值结果的地方都能获得正确的结果,而不能保证变量赋值操作的顺序与程序代码的执行顺序一致