本文将介绍AQS的简单原理。
首先有个整体认识,全称是 AbstractQueuedSynchronizer,是阻塞式锁和相关的同步器工具的框架。常用的ReentrantLock、Semaphore、CountDownLatch等都有实现它。
本文参考:
深入理解AbstractQueuedSynchronizer只需15张图_abstractqueuedsynchronizer流程图-CSDN博客
黑马程序员深入学习Java并发编程,JUC并发编程全套教程_哔哩哔哩_bilibili
从ReentrantLock的实现看AQS的原理及应用 - 美团技术团队 (meituan.com)
Java AQS 核心数据结构-CLH 锁 (qq.com)
AQS关键组成部分
state
state用来表示资源的状态(独占模式和共享模式),子类需要控制这个变量,就能够获取锁或者释放锁。
独占模式:只允许一个线程访问资源。
共享模式:允许多个线程访问资源。
CLH队列
这个队列保存的是没有获得锁资源进入阻塞的线程。使用的是头节点和尾结点来创建出这个双向队列。这个队列是先进先出的,不支持优先级。这里的CLH队列是AQS对于CLH锁的升级改后的应用。