对于AQS的理解
AQS全称AbstractQueueSyvchronizer 抽象队列同步器,内有volatile修饰的int型state变量来记录锁的状态,还有一个变量记录占有锁的线程,以及FIFO的队列。是并发的核心组件。
比如JUC.Locks.ReentrantLock的加锁与释放锁就是基于AQS实现的。
ReetrantLock默认是非公平的
当有一线程到达,尝试CAS获取锁,获取成功则将state由0置为1,并记录当前线程占有锁。
若失败,则判断占有锁的是否是当前线程,如果是则将state+1,否则则将当前线程加入队列尾部中。
释放锁
将state减一,如果state为0,则将占有锁的变量置为null,唤醒队列的头节点的后置节点,该线程CAS尝试获取锁
对AQS的简单理解
最新推荐文章于 2022-07-05 18:25:02 发布