AQS(AbstractQueuedSynchronizer)原理深度解析

AQS是Java并发包的核心基础框架,JUC中大多数同步器(如ReentrantLock、CountDownLatch等)都是基于它实现的。

一、AQS核心设计

1. 三大核心组件

组件 作用
state volatile int,表示同步状态(如锁的重入次数、信号量剩余数量等)
CLH队列 双向FIFO等待队列,存储阻塞线程(Craig, Landin, and Hagersten锁队列的变种)
Condition队列 单向链表,用于实现条件等待/通知机制

2. 关键模板方法

// 需要子类实现的方法
protected boolean tryAcquire(int arg)  // 尝试获取独占锁
protected boolean tryRelease(int arg)  // 尝试释放独占锁
protected int tryAcquireShared(int arg) // 尝试获取共享锁
protected boolean tryReleaseShared(int arg) // 尝试释放共享锁

二、独占模式(如ReentrantLock)

1. 获取锁流程(acquire)

public final void acquire(int arg) {
    if (!tryAcquire(arg) && // 尝试获取锁(子类实现)
        acquireQueued(addWa
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值