文章目录
volatile(变量可见,禁止重排序)
稍弱的同步机制,确保将变量的更新操作通知到其他线程。
两种特性
- 不会被缓存再寄存器或者对其他处理器不可见的地方。
- 读取volatile类型的变量时总会返回最新写入的值。
变量可见性
保证该变量对所有线程可见。可见性指当一个线程修改了变量值,那么新值对于其他线程是可以立即获取的。
禁止重排序
volatile禁止了指令重排。
比synchronized更轻量级的同步锁
- 访问volatile变量时不会执行加锁操作
- 所以不会使线程阻塞,更轻量的同步机制
- 适合一个变量被多个线程共享,线程直接给这个变量赋值。
原理(不拷贝到cpu缓存,直接从内存读)

使用场景(不保证i++,单纯boolean赋值,不依赖自身或其他变量)
- 对单次读写操作保证原子性
- i++是读写两次操作,不能保证原子性
- 某些场景可以代替syn,但不能完全取代
- 例如:写操作不依赖当前值,单纯赋值boolean flag=true
- 不同volatile变量之间,不能互相依赖。只有真正独立于程序内其他内容时才能使用volatile。