java-AQS(抽象队列同步器)

AQS原理:

  1. 当线程请求的共享资源空闲时,将资源设置为锁定状态,同时将当前线程设置为工作线程
  2. 当其他线程来请求当前被锁定的资源时,将其暂时放到一个队列当中(基于CLH队列实现)
  3. CLH队列锁帮助实现其他线程的挂起等待以及唤醒、分配锁功能

注:CLH(Craig,Landin,and Hagersten)队列是一个虚拟的双向队列(虚拟的双向队列即不存在队列实例,仅存在结点之间的关联关系)。AQS是将每条请求共享资源的线程封装成一个CLH锁队列的一个结点(Node)来实现锁的分配。

AQS 对资源的共享方式

    独占(exclusive):只有一个线程可以执行(如:ReentrantLock)
  1. 公平锁
  2. 非公平锁
    共享(share):多个线程可同时执行(如Semaphore、CountDownLatCh、 CyclicBarrier、ReadWriteLock)

AQS底层设计模式

    模板方法模式

参考:

经验分享 程序员 微信小程序 职场和发展