把变量声明为Volatile类型后,编译器和运行时都会注意到这个变量是共享的,因此不会将该变量的操作和其他内存操作一起重排序。
Volatile变量不会被缓存梓寄存器或者对其他处理器不可见的地方,因此在读取volatile类型的变量时总会返回最新的写入值
访问volatile变量不会执行加锁操作,从而不会阻塞线程。因此他是比sychronized关键字更轻量的同步机制。
volatile变量只能确保可见性,而加锁机制既可以保证可见性,又可以确保原子性
当且仅当符合以下条件才该使用volatile:
1.变量的写操作不依赖变量的当前值
2.访问变量的时候不需要加锁
3.变量不会与其他状态变量一起纳入不变性条件中