JUC——AQS原理分析

AQS是Java并发库JUC的基石,它提供了一种抽象的FIFO队列同步器,用于实现锁和同步组件。AQS通过一个volatile变量表示同步状态,并利用CAS操作、自旋以及线程阻塞来管理同步状态,实现线程间的并发同步。在资源被占用时,未获取资源的线程会被组织成一个双向队列等待。AQS广泛应用于ReentrantLock等锁的实现。
摘要由CSDN通过智能技术生成

AQS原理分析

什么是AQS

AQS在java源码中主要是指AbstractQueuedSynchronizer(抽象队列同步器)抽象类。
它整体就是一个抽象的FIFO队列来完成资源获取线程的排队工作,并通过一个int类型变量表示持有锁的状态。

为什么AQS是JUC的基石

凡是实现锁机制的一些抽象接口,底层都是依靠AQS实现的
在这里插入图片描述

进一步理解锁和同步器的关系

同步器:面向锁的实现者,java并发大神DougLee,提出同意规范并简化了锁的实现,将其抽象出来,屏蔽了同步状态管理、同步队列的管理和维护、阻塞线程排队和通知、唤醒机制等。是一切锁和同步组件实现的——公共基础部分。

AQS是干嘛的

抢到资源的线程直接使用处理业务。抢不到资源的必然涉及一种排队等候机制。抢占资源失败的线程继续去等待(类似银行业务办理窗口都满了,暂时没有受理窗口的顾客只能去候客区排队等候),但等候线程仍然保留获取锁的可能且获取锁流程仍在继续(候客区的顾客也在等着叫号,轮到了再去受理窗口办理业务)。

既然说到了排队等候机制,那么就一定会有某种队列形成,这样的队列是什么数据结构呢?(AQS)

如果共享资源被占用,就需要一定的阻塞等待唤醒机制来保证锁分配。这个机制主要用的是CLH队列的变体(双向队列)实现的࿰

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值