AbstractQueuedSynchronizer---AQS

AQS:抽象的队列同步器

  是用来构建锁或者其它同步器组件的重量级基础框架及整个UC体系的基石,通过内置的FO队列来完成资源获取线程的排队工作,并通过一个int类型变量表示持有锁的状态;

 

AQS为什么是JUC内容中最重要的基石?

在juc下countDownLatch、Semaphore、CyclicBarrier、ReentrantLock、ReentrantReadWriteLock、、、等等类中都是用AQS来实现;

 

能干嘛?

 

 

初步了解AQS:

  AQS使用一个 volatile 的int类型的成员变量来表示同步状态,通过内置的FIFO队列来完成资源获取的排队工作将每条要去抢占资源的线程封装成一个Node节点来实现锁的分配,通过CAS完成对State值的修改。

  

AQS自身:(State变量 + CLH双向队列)

  1、AQS的同步状态 State 成员变量:

    private volatile int state;

  2、AQS的CLH队列:

    CLH队列为一个是双向队列;(CLH为三个人名的缩写)

    private transient volatile Node head;//头节点

    private transient volatile Node tail;//尾节点

 

AQS内部类 Node:

  volatile int waitStatus;//Node的等待状态成员变量

  volatile Node prev;//前节点

  volatile Node next;//后节点

  volatile Thread thread;

 

 

AQS基本结构:

 

 

Lock接口的实现类,基本都是通过聚合了一个队列同步器的子类完成线程访问控制的;

posted @   DHaiLin  阅读(60)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
点击右上角即可分享
微信分享提示