AbstractQueuedSynchronizer(AQS)的实现原理主要基于一个FIFO(先进先出)的等待队列和两个原子状态变量(state和exclusiveOwnerThread)。
- 状态变量:
state
:表示资源的状态,可以用于表示锁的占用情况或者其他同步状态。exclusiveOwnerThread
:表示当前占用锁的线程。
- 等待队列:
- 使用一个双向链表来维护等待线程的队列。
- 等待队列中的节点(Node)用于保存等待线程的信息,包括线程本身和一些状态信息。
AQS的主要原理可以概括为以下几个步骤:
- 获取锁(acquire):
- 当线程尝试获取锁时,如果锁是可用的(
state
为0),则直接将state
设置为1,表示锁被占用,同时记录当前占用锁的线程为exclusiveOwnerThread
。 - 如果锁不可用,则创建一个节点(Node)表示当前线程,并将其加入到等待队列的尾部,然后通过自旋等待锁的释放。
- 释放锁(release):
- 当线程释放锁时,