5分钟学后台—面试必死要问的问题:你了解Java的AQS吗?

Linux命令行与shell脚本编程大全.pdf学习 这是一本关于 Linux 命令行与 shell 脚本编程的全方位教程,主要包括四大部分 :Linux 命令行,shell 脚本编程基础,高级 shell 脚本编程,如何创建实用的 shell 脚本。本书针对 Linux 系统的最新特性进行了全面更新,不仅涵盖了详尽的动手教程和现实世界中的实用信息,还提供了与所学内容相关的参考信息和背景资料。通过本书的学习,你将轻松写出自己的 shell 脚本。 本书适合 Linux 程序设计人员阅读。 核心Linux发行版含有内核、一个或多个图形化桌面环境以及预编译好 阅读详情

AQS简介

AQS是一个抽象类,不可以被实例化,它的设计之初就是为了让子类通过继承来实现多样的功能的。它内部提供了一个FIFO的等待队列,用于多个线程等待一个事件(锁)。它有一个重要的状态标志——state,该属性是一个int值,表示对象的当前状态(如0表示lock,1表示unlock)。AQS提供了三个protected final的方法来改变state的值,分别是:getState、setState(int)、compareAndSetState(int, int)。根据修饰符,它们是不可以被子类重写的,但可以在子类中进行调用,这也就意味着子类可以根据自己的逻辑来决定如何使用state值。

AQS的子类应当被定义为内部类,作为内部的helper对象。事实上,这也是juc种锁的做法,如ReentrantLock,便是通过内部的Sync对象来继承AQS的。AQS中定义了一些未实现的方法(抛出UnsupportedOperationException异常)

  • tryAcquire(int) 尝试获取state

  • tryRelease(int) 尝试释放state

  • tryAcquireShared(int) 共享的方式尝试获取

  • tryReleaseShared(int) 共享的方式尝试释放

  • isHeldExclusively() 判断当前是否为独占锁

这些方法是子类需要实现的,可以选择实现其中的一部分。根据实现方式的不同,可以分为两种:独占锁和共享锁。其中JUC中锁的分类为:

  • 独占锁:ReentrantLock、ReentrantReadWriteLock.WriteLock

  • 共享锁:ReentrantReadWriteLock.ReadLock、CountDownLatch、CyclicBarrier、Semaphore

其实现方式为:

  • 独占锁实现的是tryAcquire(int)、tryRelease(int)

  • 共享锁实现的是tryAcquireShared(int)、tryReleaseShared(int)

AQS中还提供了一个内部类ConditionObject,它实现了Condition接口,可以用于await/signal。采用CLH队列的算法,唤醒当前线程的下一个节点对应的线程,而signalAll唤醒所有线程。

总的来说,AQS提供了三个功能:

  1. 实现独占锁

  2. 实现共享锁

  3. 实现Condition模型

AQS通俗举例:

如果看到这里,你还不是特别理解 AQS 的作用,那就请看接下来的这个比喻,我们把 AQS 和线程协作工具类给“拟人化”,比作是 HR 和面试官。

这里模拟候选人参加校招面试的场景。对公司而言,面试一般需要面试官和 HR 参加。通常有两种面试,一种是群面,一种是单面,群面是指多个同学一起参加的面试,例如规定是 10 个人一起面试,那群面规则就是先凑齐 10 个人,再统一面试。

而单面往往是流水线形式的、一对一的面试。假设我们一共有 5 个面试官进行单面,即这 5 个面试官同时分别面试一个候选人,在面试过程中,候选人会进行排队,前面的候选人面试完了以后,后面候选人就跟上,找空闲的面试官开始面试,这就是单面的场景。

乍看起来,群面和单面的面试规则是很不一样的:前者是多人一起面试,而后者是逐个面试。但也其实,群面和单面也有很多相同的地方(或者称为流程或环节),而这些相同的地方往往都是由 HR 负责的。比如面试者来了,HR 需要安排候选人签到、就坐等待、排队,然后 HR 要按顺序叫号,从而避免发生多个候选人冲突的情况,同时 HR 还要确保等待的同学最终都会被叫到,这一系列的内容都由 HR 负责,而这些内容无论是单面还是群面都是一样的。这些 HR 在面试中所做的工作,其实就可以比作是 AQS 所干的活儿。至于具体的面试规则,比如群面规则是 5 个人还是 10 个人一起?是单面还是群?这些是由面试官来安排的。对于面试官而言,他不会关心候选人是否号码冲突、如何等待、如何叫号,是否有休息的场地等,因为这是 HR 的职责范围。这里的面试官就对应利用了 AQS 实现具体的协作逻辑的工具类,而 HR 则代表 AQS。刚才所说的让候选人休息,就是指把线程进行阻塞,不要持续耗费 CPU;而后续叫号让候选人去面试,则意味着去唤醒线程。群面的流程类似于 CountDownLatch,CountDownLatch 会先设置需要倒数的初始值,假设为 10,每来一个候选人,计数减 1,如果 10 个人都到齐了,就开始面试。同样,单面可以理解为是 Semaphore 信号量,假设有 5 个许可证,每个线程每次获取 1 个许可证,这就类似于有 5 个面试官并行面试,候选人在面试之前需要先获得许可证,面试结束后归还许可证。对于 CountDownLatch 和 Semaphore 等工具类而言,它要确定自己的“要人”规则,是凑齐 10 个候选人一起面试,像群面一样呢?还是出 1 进 1,像单面一样呢?确定了规则之后,剩下的类似招呼面试者(类比于调度线程)等一系列工作可以交给 AQS 来做,这样一来,各自的职责就非常独立且分明了。

总结:

⁣学习AQS 的思路,为什么需要 AQS,以及 AQS 的作用,利用 AQS 可以很方便的实现线程协作工具类,而且 AQS 被广泛应用在了 JUC 包中。

上面只是讲解了AQS简单介绍, 关于AQS更全面更深入的讲解,请观看 <大厂面试逆袭神器:AQS> 的直播课程. 对本次直播感兴趣的同学请扫描下方二维码

长按扫码👆,锁定0元名额

长按扫码👆,锁定0元名额

免费获取AQS课程资料与直播链接!

仅前 50 人有效,先到先得!

Windows下通过Ollama安装使用DeepSeek本地大模型 本地安装运行Deepseek大模型 阅读详情

相关推荐

事件相机(Event Camera)及相关研究简介——新一代相机?新的计算机视觉领域?

事件相机(Event Camera)及相关研究简介 事件相机是一个新型的类脑相机,是一个待开发的大领域。希望通过我的分享,能够有更多人来研究并将它更好地运用在我们的生活中~

Cyril的博客 5万+

2024年JAVA面试题,终于整理完了

AQS是一个抽象类,可以用来构造锁和同步类,如ReentrantLock,Semaphore,CountDownLatch,CyclicBarrier。AQS的原理是,AQS内部有三个核心组件,一个是state代表加锁状态初始值为0,一个是获取到锁的线程,还有一个阻塞队列。当有线程想获取锁时,会以CAS的形式将state变为1,CAS成功后便将加锁线程设为自己。当其他线程来竞争锁时会判断state是不是0,不是0再判断加锁线程是不是自己,不是的话就把自己放入阻塞队列。这个阻塞队列是用双向链表实现的。

2301_78976656的博客 1576

QSPI Flash的原理与QSPI时序的Verilog实现

本节主要是讨论QSPI(Quad SPI,四线SPI总线)的相关内容。我的开发板上有一片型号是W25Q128BV的Quad SPI Flash存储器,本文将以它为例子来说明QSPI操作的一些内容。

Go Forward Forever! 4164

Java面试--AQS

AQS

小刺猬 5562

R以及Rstudio超详细安装教程(包括安装过程中出现的问题)

R安装及Rstudio安装,以及安装中出现的问题

2301_76908257的博客 1万+

Ubuntu18.04黑屏救急指南:从tty到图形界面的5种恢复方法(附网络配置技巧)

本文针对Ubuntu 18.04系统启动后出现黑屏并进入tty命令行的问题,提供了一套从紧急诊断到完全恢复图形化界面的系统性实战指南。文章详细讲解了五种核心恢复方法,包括重启显示管理器、重装ubuntu-desktop桌面环境、手动安装Xorg与LightDM等,并重点解决了纯命令行环境下的网络配置难题,帮助用户快速修复系统,恢复工作环境。

weixin_29243279的博客 358

大白话聊聊Java并发面试问题之谈谈你对AQS的理解?【石杉的架构笔记】

一、写在前面 上一篇文章聊了一下java并发中常用的原子类的原理和Java 8的优化,具体请参见文章:《大白话聊聊Java并发面试问题之Java 8如何优化CAS性能?》。 这篇文章,我们来聊聊面试的时候比较有杀伤力的一个问题:聊聊你对AQS的理解? 之前有同学反馈,去互联网公司面试,面试官聊到并发时就问到了这个问题。当时那位同学内心估计受到了一万点伤害。。。 因为首先,很多人还真的连AQS是什么都不知道,可能听都没听说过。或者有的人听说过AQS这个名词,但是可能连具体全称怎...

从2026-09-21开始专注于AI,以前是后端研发、大数据研发等 403

YOLOv11改进 - 卷积Conv | GCNet之金箍棒块GCBlock : 重参数化捕获全局依赖 | CVPR 2025

文介绍了GCBlock在YOLOv11中的结合应用。GCBlock是GCNet的核心组件,能高效捕获特征图中的全局依赖关系,融合了非局部网络和挤压 - 激励网络的优势,降低计算成本并保障模型性能。其遵循“上下文建模 - 特征变换 - 特征融合”框架,通过全局平均池化、全连接层等操作生成注意力权重。我们将GCBlock集成进YOLOv11,替代原有的部分卷积模块,实现更高效的全局上下文建模。实验证明,YOLOv11-GCBlock在目标检测任务中表现出色,展现了GCBlock在深度学习中的广泛应用前景。

魔改工程师的博客 905

JAVA面试题|AQS详细剖析

JAVA基础篇面试题 文章目录JAVA基础篇面试题1. 线程等待唤醒的实现方法2. 介绍一下LockSupport3. AQS是什么4. AQS的核心原理5. 公平锁与非公平锁的区别6. 请讲述非公平锁加锁解锁的具体流程 1. 线程等待唤醒的实现方法 Object对象中的wait()方法可以让线程等待,使用Object中的notify()方法唤醒线程; 必须都在同步代码块内使用; 调用wait,notify的对象是加锁对象; notify必须在wait后执行才能唤醒; wait后能释放锁对象,线程处

qq_37419449的博客 1万+

PINN疲劳寿命预测优化

本项目基于物理信息神经网络(PINN)构建材料疲劳寿命预测模型,通过融合Paris裂纹扩展方程与实验数据,实现裂纹扩展行为的精准预测。核心方法包括:1)将Paris方程作为物理约束嵌入神经网络训练;2)生成含噪声的模拟数据并进行归一化处理;3)采用PINN-GA联合优化框架,以裂纹扩展速率最小化为目标优化材料参数。该方案通过物理规律与数据驱动的结合,显著提升预测模型的泛化能力,为工程材料寿命评估提供新思路。

huanghm88的专栏 145

Qt5.14.2开发Mqtt应用程序

然后,你就做不下去了…很明显,大部分博主写的东西不是缺头就是缺尾,带偏了许多读者。,因此我们需要clone的是这个分支版本,而不是这个默认的。然后将编译产物中include里的所有.h文件复制到。下载完后直接默认安装即可,这一步没什么好说的。看到了没,这个才是正确的操作方式,而主线的。信号来判断,自行实现自己的槽函数。然后选择构建方式,这里我选择的是。信号来判断自行实现自己的槽函数。信号来判断自行实现自己的槽函数。源代码,如下图所示,双击打开。收到下行消息时,可以通过连接。

Bruce.yang的嵌入式之旅 2309

AQS详解(面试)

AQS原理 AQS:AbstractQuenedSynchronizer抽象的队列式同步器。 AQS的核心思想是,如果被请求的共享资源空闲,则将当前请求资源的线程设置为有效的工作线程,并将共享资源设置为锁定状态,如果被请求的共享资源被占用,那么就需要一套线程阻塞等待以及被唤醒时锁分配的机制,这个机制AQS是用CLH队列锁实现的,即将暂时获取不到锁的线程加入到队列中。 CLH(Craig,Landi...

mulinsen77的博客 19万+

60、拓扑码:从理论到应用

本博客深入探讨了拓扑码的基本理论、构造方法及其在量子计算中的应用。重点介绍了颜色码的拓扑起源、编码量子比特的计算方法、弦算子的构造与性质、边界条件的影响、同调描述以及与统计模型相关的错误阈值分析。同时,还涵盖了拓扑码的历史发展、与其他拓扑码的关系、与凝聚态系统的联系,以及其在激发态和高维中的表现。博客展示了拓扑码在容错量子计算和未来量子信息领域的广阔前景。

o1p2q3r的博客 128

Java的AQS面试题_面试官的灵魂拷问,AQS是啥?

程序员面试金典第6版offer企业题114.3元(需用券)去购买 >啥?你连 AQS 是啥都不知道?如果想要精通 Java 并发的话, AQS 是一定要掌握的。今天跟着阿粉一起搞一搞基本概念AQS 是AbstractQueuedSynchronizer 的简称,翻译成中文就是 抽象队列同步器 ,这三个单词分开来看:Abstract (抽象):也就是说, AQS 是一个抽象类,只实现一些主要的...

weixin_39593718的博客 934

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

Java高频面试之--- AQS原理解析

什么是AQS?AQS有什么用呢? 本篇文章主要就是解决这两个问题,并且附上源码解析。 AQS 的全称是 AbstactQueuedSynchronizer 即抽象队列同步器。 可能大部分使用Java语言的同学都知道它,因为他是面试的高频问题之一,面试Android也会问这样的问题,我自己就被问了好几次。 java并发包下很多API都是基于AQS来实现的加锁和释放锁等功能的,AQS是java并发包的...

zhujiangtaotaise的专栏 6364

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

面试题:了解Java的AQS吗?

前言java.util.concurrent包(之后简称JUC包)中,提供了大量的同步与并发的工具类,是多线程编程的“利器”。其中locks包下,包含了多种锁,如Reen...

IT技术精选文摘 1万+

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Java并发面试问题,谈谈你对AQS的理解

新人大礼包,30G Java架构资料,免费领取 一、概述 谈到并发,不得不谈ReentrantLock;而谈到ReentrantLock,不得不谈AbstractQueuedSynchronizer(AQS)! 类如其名,抽象的队列式的同步器,AQS定义了一套多线程访问共享资源的同步器框架,许多同步类实现都依赖于它,如常用的ReentrantLock/Sem...

不喝枸杞的程序员 481

Java并发编程面试问题之谈谈你对AQS的理解

AQS其实是Java并发包的基础组件,它提供了一种实现阻塞锁和一系列依赖FIFO等待队列的同步器的框架,ReentrantLock、Semaphore、CountDownLatch、CyclicBarrier等并发类均是基于AQS来实现的。AQS包含了state变量、加锁线程、等待队列等并发问题的核心组件。参考文献穿插在了文中。 1、ReentrantLock与AQS的关系     首先回忆一下ReentrantLock在同步问题中的使用,其实主要使用ReentrantLock的lock()和...

qq_45770532的博客 1247

(四)【Java精选面试题】AQS底层架构设计原理(含答案)

目录1. 谈谈Lock锁底层实现原理2. synchronized与lock锁之间区别3. 谈谈LockSupport的用法4. AQS核心参数有哪些呢5. Lock锁基本实现原理6. Semaphore信号量底层原理7. CountDownLatch底层原理 1. 谈谈Lock锁底层实现原理 底层基于AQS+Cas+LockSupport锁实现 2. synchronized与lock锁之间区别 Lock基于AQS封装的锁,结合 CAS实现,而Lock锁的升级过程需要自己实现; Synchronized

记录各种Bug解决案例及日常学习内容 1846

我面试时遇见过的Java面试题目、校招面试

一.J2SE 1.   I/O:将对象转换为文件实现什么接口;反射是哪一个类 有些什么方法   通过反射获取方法时,能获取private的方法吗?protected? 2.   集合框架:collection下面有什么;关于集合线程安全是如何实现的  3.   arrayList和linkedList区别 ,vector和arraylist区别, 4.   数据结构:问了下二叉树,接着扩展...

sinat_23224827的博客 2966

Java并发之谈谈对AQS的理解

一、写在前面 这篇文章,我们来聊聊面试的时候比较有杀伤力的一个问题:聊聊你对AQS的理解? 之前有同学反馈,去互联网公司面试,面试官聊到并发时就问到了这个问题。当时那位同学内心估计受到了一万点伤害。。。 因为首先,很多人还真的连AQS是什么都不知道,可能听都没听说过。或者有的人听说过AQS这个名词,但是可能连具体全称怎么拼写都不知道。 更有甚者,可能会说:AQS?是不是一种思想?我们平时开...

刘成 1919

java aqs面试题_死磕 java同步系列之AQS终篇(面试)

问题(1)AQS的定位?(2)AQS的重要组成部分?(3)AQS运用的设计模式?(4)AQS的总体流程?简介AQS的全称是AbstractQueuedSynchronizer,它的定位是为Java中几乎所有的锁和同步器提供一个基础框架。在之前的章节中,我们一起学习了ReentrantLock、ReentrantReadWriteLock、Semaphore、CountDownLatch的源码,今天...

weixin_35241774的博客 893

AQS原理剖析

并发编程是大厂面试中重点考察的问题。 此类问题回答的好坏会在很大程度上影响我们面试的得分。 1. AQS在java中的使用 给代码加锁,是java中处理并发问题的重要手段。 java中的很多锁都是基于抽象类AQS(AbstractQueuedSynchronizer)实现的。 如下表所示: 同步工具 同步工具与AQS的关联 ReentrantLock 使用AQS保存锁重复持有的次数。当一个线程获取锁时,ReentrantLock记录当前获得锁的线程标识,用于检测是否重复获取.

jzf2003428036的专栏 353

Java面试必问题目:AQS原理深度剖析,看完吊打面试官!

大家好,我是小马哥。最近并发编程是大厂面试中重点考察的问题。今天我们来探讨一下AQS相关的面试技巧。毕竟此类问题回答的好坏会在很大程度上影响我们面试的得分。 1. AQS在java中的使用 给代码加锁,是java中处理并发问题的重要手段。 java中的很多锁都是基于抽象类AQS(AbstractQueuedSynchronizer)实现的。 如下表所示: 2. AQS的实现机制 AQS提供了实现锁的机制,即CLH队列,同时通过ConditionObject实现了条件等待链表。 其中CLH队列如下:

每日搜罗 2957

全网超硬核程序必读资源免费分享

Java是一门面向对象编程语言。向对象编程是Java最核心的思想,这也是区分和C等其他编程语言的一个显著特征。掌握面一门语言,首先得掌握它的思想,思想决定高度。这就和我们学习语文和英语一样,汉语学拼音,英语学音标。抓住了核心,学习起来就事半功倍。 首先一手资源是官网文档,其次是一些大神的书籍,国外的大神多一些,毕竟这些语言都是老外发明的,比如经典的java入门书籍《新手学Java 7编程(第5版).pdf》《 Thinking.In.Java(中文版).pdf》等等。其次就是中文书籍、中文教学视频了。 对

每日搜罗 1311

阿里2021最全新的java面试题总结

前言 2021马上金九银十进入招聘旺季了,现为大家整理了这次金九银十面试阿里的面试题总结,都是我从朋友那拿到的面试真题,话不多说,满满的干货分享给大家! int a=10是原子操作吗? 是的。 注意点: i++(或++i)是非原子操作,i++是一个多步操作,而且是可以被中断的。i++可以被分割成3步,第一步读取i的值,第二步计算i+1;第三部将最终值赋值给i。 int a = b;不是原子操作。从语法的级别来看,这是也是一条语句,是原子的;但是从实际执行的二进制指令来看,由于现代计算机CPU架构体系

每日搜罗 1188
上一篇: 5分钟学后台:分布式事务解决终极方案!
下一篇: 8年的Java后台开发,为什么 还不知道分布式限流?看完涨薪翻倍了
84696zuoguwz
博客等级 码龄5年 12粉丝 13原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值