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底层设计模式 

  • 模板方法模式 

参考:

  1. AQS介绍    https://github.com/Snailclimb/JavaGuide/blob/master/Java%E7%9B%B8%E5%85%B3/Multithread/AQS.md
  2. 设计模式学习笔记之九:模板方法模式    https://www.cnblogs.com/stonefeng/p/5743673.html

猜你喜欢

转载自blog.csdn.net/m0_37524661/article/details/88015342