一、概述
AQS:AbstractQuenedSynchronizer抽象的队列式同步器。是除了java自带的synchronized关键字之外的锁机制。
二、原理
aqs实际上维持的是一个双向链表队列,但同时与一般队列不同的是,队首指向的就是当前占有锁的对象。
Node结构: thread,waitStatue
以公平锁为例:
当运行时,主要使用的是aquire()函数
1、将node节点加到队列尾部:
addWaiter():tail!=null?添加到尾部
否则enq():添加新节点作为队首,同时将目标node当成尾节点加入到队列中
2、acquireQueued()
比较当前node前驱节点是否head,是则直接返回
否则自旋两遍shouldParkAfterFailedAcquire(p, node)即将前驱节点的waitStatue设为-1,之后再将调用thread.interrupt()进行中断
AQS工作流程
最新推荐文章于 2024-07-23 00:30:39 发布