关键字volatile可以说是java虚拟机提供的最轻量级的同步机制。
当一个变量定义为volatile之后,它将具备两种特性:
- 第一是保证变量对所有线程的可见性,即当一条线程修改了这个变量的值,新值对于其他线程来说是可以立即得知的。
在不符合以下两条规则的运算场景下,我们仍然要通过加锁来保证原子性:运算结果并不依赖变量的当前值,或者能够确保只有单一的线程修改变量的值;变量不需要与其他的状态变量共同参与不变约束。
- 第二是禁止指令重排序优化。
关键字volatile可以说是java虚拟机提供的最轻量级的同步机制。
当一个变量定义为volatile之后,它将具备两种特性:
在不符合以下两条规则的运算场景下,我们仍然要通过加锁来保证原子性:运算结果并不依赖变量的当前值,或者能够确保只有单一的线程修改变量的值;变量不需要与其他的状态变量共同参与不变约束。