volatile是java语言提供的一种比synchronized更轻量级的同步机制。
它用来确保将变量的更新操作通知到其它线程;当变量被声明为volatile类型后,编译器与运行时都会注意到这个变量是共享的。
加锁机制既可以确保可见性又可以确保原子性,而volatile变量只能确保可见性。
使用条件
- 对变量的写入操作不依赖变量的当前值,或者你能确保只有单个线程更新变量的值
- 该变量不会与其他状态变量一起纳入不变性条件中
- 在访问变量时不需要加锁
volatile boolean asleep;
while(!asleep){
...
}