理解AQS

本文详细介绍了AQS(AbstractQueuedSynchronizer)的原理,包括其作为JUC基础的重要性、同步状态管理、FIFO队列的使用,以及如何通过ReentrantLock的lock和unlock方法理解AQS的运行过程。
摘要由CSDN通过智能技术生成

 

0.来源说明

本文是对尚硅谷2020最新版Java面试题第三季(java大厂面试题,周阳主讲)中的AQS 视频资料的学习整理

1.前置知识

公平锁和非公平锁

可重入锁

LockSupport

自旋锁(CAS)

数据结构之链表

设计模式之模板设计模式

2.是什么

1)字面意思:抽象的队列同步器

抽象的:说明是个抽象类,提供了很多模板方法供子类实现

队列:对抢不到锁的队列进行管理

同步器:

2)技术解释

是用来构建锁或者其他同步组件的重量级基础框架,

通过内置的FIFO队列来完成资源获取线程的排队工作,并通过一个int类型变量表示持有锁的状态。

是整个JUC体系的基石。(FIFO队列 + state)

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

使用AQS实现的组件:ReentrantLock、CountDownLatch、ReentrantReadWriteLock、Semaphore

 

理解锁和同步器的关系

锁,面向锁的使用者(定义了程序员和锁交互的使用层API,隐藏了实现细节,你调用即可)

同步器,面向锁的实现者(统一规范并简化了锁的实现,屏蔽了同步状态管理、阻塞线程排队和通知、唤醒机制等)

4.能干嘛

加锁会导致阻塞:有阻塞就需要排队,实现排队必然需要有某种形式的队列来进行管理

解释说明:

 

5.AQS初步

5.1AQS初识

官网解释

有阻塞就需要排队,实现排队必然需要队列

AQS使用一个volatile的int变量来表示同步状态,通过CAS完成对state值得修改;

通过内置的FIFO队列来完成对获取资源的线程(抢占资源的线程封装成一个Node节点来实现锁的分配)的排队工作。

5.2AQS内部体系架构

1)AQS自身

AQS的int变量:同步状态state——相当于银行办理业务的受理窗口状态:0表示没人,可直接办理业务;大于等于1表示有人占用窗口,需要等待

AQS的队列:FIFO队列——相当于银行大厅,等待办理业务的人需要在大厅排队等待叫号

 

总结一下:

有阻塞就需要排队,实现排队必然需要队列。

state同步状态 + FIFO队列

2)内部类Node

Node的int变量

 

 内部结构

 属性说明

5.3AQS同步队列的基本结构

6.从ReentrantLock的lock和unlock方法理解AQS运行过程

从ReentrantLock的lock和unlock方法理解AQS运行过程

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值