AQS简介
全称Abstract Queued Synchronizer, 抽象队列同步器,它是并发包中的基础类,比如ReentrantLock就基于AQS实现可重入锁
AQS原理
AQS中有state丶临界区线程丶等待队列三个重要部分组成
其中线程去CAS更新state为1,更新成功的线程进入代码临界区,其它CAS更新失败的线程进入等待队列
临界区线程释放锁后,唤醒等待队列线程.如果此时有其它线程进来CAS更新state为1,那么等待队列线程继续等待,这就是被插队,非公平锁,Java中ReentrantLock默认是非公平锁.
如果改为公平锁,其它线程每次都要判断队列头部,也就是第一个位置是否有线程,如果有线程在排队,就继续等待,直到当前线程变为队列头部才可CAS更新state为1