- volatile的作用
1 保证变量的可见性:1 当前线程变量改变后,强制刷新主内存(堆内存)变量 2 所有线程每次在使用变量时都从主内存中获取
2 禁止指令重排:禁止操作系统对指令的优化重排序
- volatile使用实例:ReentrantLock非公平锁的state值(继承AQS)就是用volatile修饰的
- 为啥AQS的state变量用volatile?普通变量不行吗?
volatile + CAS实现非阻塞式线程同步:通过Syncronized的方式当然可以实现线程同步,但是消耗太大;AQS框架使用volatile + CAS实现非阻塞式线程同步,线程同步需要保证3个方面:可见性、有序性、原子性,volatile保证了变量的可见性和有序性,用CAS操作保证变量的原子性。