JUC之AQS原理-多线程与高并发

本文深入探讨AQS(AbstractQueuedSynchronizer),它是Java并发库JUC的基础,用于实现如ReentrantLock、CountDownLatch等同步组件。AQS通过FIFO队列管理线程,依赖于CAS和volatile确保线程安全。文章分析了ReentrantLock与AQS的关系,展示了调试加锁过程,并介绍了AQS的类结构及其在不同子类中的应用。
摘要由CSDN通过智能技术生成

目录

(1)ReentranLock与AQS的关系

(2)动态调试ReentranLock程序的加锁调用过程

(3)AQS的类结构

(4)AQS一些子类实现的应用介绍


AQS是AbstractQueuedSynchronizer的缩写,它提供一个框架,用于实现依赖于先进先出(FIFO)等待队列的阻塞锁和相关的同步器(信号灯,事件等)。 此类旨在为大多数依赖单个原子{@code int}值表示状态的同步器提供有用的基础。 子类必须定义更改此状态的受保护方法,并定义该状态对于获取或释放此对象而言意味着什么。 鉴于这些,此类中的其他方法将执行所有排队和阻塞机制。 子类可以维护其他状态字段,但仅跟踪使用方法{@link #getState},{@ link #setState}和{@link #compareAndSetState}进行原子更新的{@code int}值的同步性。

AQS有很多具体的实现子类,比如ReentranLock、CountDownLatch、CyclicBarrier、Semaphore等核心都依赖AQS类实现。

(1)ReentranLock与AQS的关系

拿ReentranLock来说,其主要代码逻辑是依靠其内部抽象类Sync具体实现。Sync是AbstractQueuedSynchronizer的子类。

abstract static class Sync extends AbstractQueuedSynchronizer

而Sync抽象类又有两个实现子类FairSync和NonfairSync。

ReentrantLock与Sync-NonfairSync-NonfairSync的关系

 

 

Sync-NonfairSync-NonfairSync与AQS的关系

 

 

(2)动态调试ReentranLock程序的加锁调用过程

之前我们用ReentranLock实现了一个固定容量的容器,实现生产者和消费者的模型。

https://blog.csdn.net/phs999/article/details/109107758


                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值