【㉿Java并发】说说对AQS(AbstractQueuedSynchronizer)队列同步器的理解

AQS 是构建锁或者其他同步组件的基础框架(如 ReentrantLock、ReentrantReadWriteLock、Semaphore 等), 包含了实现同步器的细节(获取同步状态、FIFO 同步队列)。AQS 的主要使用方式是继承,子类通过继承同步器,并实现它的抽象方法来管理同步状态。

维护一个同步状态 state。当 state > 0时,表示已经获取了锁;当state = 0 时,表示释放了锁。

AQS 通过内置的 FIFO 同步队列来完成资源获取线程的排队工作:

  • 如果当前线程获取同步状态失败(锁)时,AQS 则会将当前线程以及等待状态等信息构造成一个节点(Node)并将其加入同步队列,同时会阻塞当前线程
  • 当同步状态释放时,则会把节点中的线程唤醒,使其再次尝试获取同步状态。

AQS 内部维护的是 CLH 双向同步队列

posted @ 2023-03-19 14:55  残城碎梦  阅读(17)  评论(0编辑  收藏  举报