【八股】AQS,ReentrantLock实现原理

devtools/2024/9/23 8:29:01/

AQS_0">AQS

概念

AQS 的全称是 AbstractQueuedSynchronized (抽象队列同步器),在java.util.concurrent.locks包下面。
AQS是一个抽象类,主要用来构建锁和同步器,比如ReentrantLock, Semaphore, CountDownLatch,里面都用到了Sync类, Sync类是AQS的子类。

java">public abstract class AbstractQueuedSynchronizer extends AbstractOwnableSynchronizer implements java.io.Serializable {
}

AQS_11">AQS原理

有一个int类型的成员变量 state 表示同步状态,还有一个内置的FIFO等待队列来完成资源线程的排队工作。

java">/*** The synchronization state.*/
private volatile int state;

ReentrantLock_21">ReentrantLock

ReentrantLock_22">什么是ReentrantLock

ReentrantLock是一个支持可重入的锁,调用lock方法获取锁之后,再次调用lock,不会阻塞。
支持公平锁和非公平锁,默认是非公平锁。

实现原理

利用 CAS + AQS队列 来实现

ReentrantLock 里面有一个内部类 Sync,Sync 继承 AQS,加锁和解锁的大部分操作都是在 Sync 类中实现的。Sync 有公平锁 FairSync 和非公平锁 NonfairSync两个子类。
在这里插入图片描述

java">/*** Creates an instance of {@code ReentrantLock}.* This is equivalent to using {@code ReentrantLock(false)}.*/
public ReentrantLock() {sync = new NonfairSync();
}/*** Creates an instance of {@code ReentrantLock} with the* given fairness policy.** @param fair {@code true} if this lock should use a fair ordering policy*/
public ReentrantLock(boolean fair) {sync = fair ? new FairSync() : new NonfairSync();
}

http://www.ppmy.cn/devtools/32646.html

相关文章

ipad的文件如何传到手机里 iPad较大文件怎么发送出去 iMazing下载教程

在现代生活中,随着移动设备的普及和多样化,我们经常需要在不同设备之间传输文件,以便在工作、学习或娱乐中更加便捷地使用这些文件。iPad和iPhone是用户广泛使用的设备,我们时常使用它们来存储和访问大量的个人数据。但有时&#…

Jmeter05:配置环境变量

1 Jmeter 环境 1.1 什么是环境变量?path什么用? 系统设置之一,通过设置PATH,可以让程序在DOS命令行直接启动 1.2 path怎么用 如果想让一个程序可以在DOS直接启动,需要将该程序目录配置进PATH 1.3 PATH和我们的关系…

短视频矩阵系统ai剪辑 矩阵 文案 无人直播四合一功能核心独家源头saas开发

抖去推矩阵AI小程序是一款针对短视频平台的智能创作和运营工具,它具有以下功能特点: 1.批量视频生成:抖去推可以在短时间内生成大量视频,帮助商家快速制作出适合在短视频平台上推广的内容 2.全行业覆盖:适用于多个行业…

浅析边缘计算技术

概念 边缘计算是一种分布式计算范式,它将计算任务和数据存储从中心化的云端推向网络的边缘,即设备或终端,以提高响应速度和降低网络带宽需求。在边缘计算中,数据在源头附近进行处理和分析,而不需要将所有数据传输到…

智慧旅游引领旅游行业创新发展:借助智能科技的力量,实现旅游资源的优化配置和高效利用,推动旅游行业的转型升级和可持续发展

目录 一、引言 二、智慧旅游的定义与特点 1、信息化程度高 2、智能化服务丰富 3、互动性强 4、个性化服务突出 5、可持续性发展 三、智慧旅游在旅游行业创新发展中的作用 (一)优化旅游资源配置 (二)提升旅游服务质量 &…

掌握JavaScript面向对象编程核心密码:深入解析JavaScript面向对象机制对象概念、原型模式与继承策略全面指南,高效创建高质量、可维护代码

ECMAScript(简称ES,是JavaScript的标准规范)支持面向对象编程,通过构造函数模拟类,原型链实现继承,以及ES6引入的class语法糖简化面向对象开发。对象可通过构造函数创建,使用原型链共享方法和属…

yum的安装与部署

一、yum的描述 Yum 是一个在基于 Red Hat 的 Linux 发行版(如 CentOS 和 RHEL)上使用的包管理器。通常,Yum 会随着发行版的安装自动安装,因此,你可能不需要手动安装它 二、安装和配置yum源步骤 创建 Yum 仓库文件&…

数据库(MySQL)—— 事务

数据库(MySQL)—— 事务 什么是事务事务操作未控制事务测试异常情况 控制事务一查看/设置事务提交方式:提交事务回滚事务 控制事务二开启事务提交事务回滚事务 并发事务问题脏读(Dirty Read)不可重复读(Non…