volatile其实可以简单的理解为是java的一把弱锁(相当于synchronize来讲)
下面就说下volatile的作用:
- 使用volatile修饰变量,确保这个被修饰的变量的一个可见性;
- volatile变量弱于synchronize,是一把弱化的锁;
- volatile修饰的变量只确保了变量的可见性,并不能确保像加锁那样的原子性;
- 使用volatile修饰的变量的操作不会与其他内存中的操作进行重排序(一些编译器/虚拟机会对一些没有语义的代码进行重排序)
- volatile变量不会被缓存到寄存器或者其他的处理器不可见的地方,这样我们读取volatile类型的变量时总是能读取到最新返回的值;
什么时候需要用到:
- 对变量的更新操作不依赖于当前变量的值,或者能确保只有单线程更新变量的值;
- 在访问变量时不需要加入锁
- 变量不会与其他状态变量纳入到不变性的条件中;