当一个域声明为volatile类型后,编译器与运行时会监视这个变量:它是共享的,而且对它的操作不会与其他的内存操作一起被重排序。
volatile变量不会缓存在寄存器或者缓存在对其他处理器隐藏的地方。所以读一个volatile类型的变量时,总会返回由某一线程写入的最新值。
但是只有在满足了以下的标准后,才能使用volatile变量:
1、写入变量时并不依赖变量的当前值;或者能够确保只有单一的线程修改变量的值。
2、变量不需要与其他的状态变量共同参与不变约束
3、访问变量时,没有其他的原因需要加锁