
这篇文章,我们来聊聊面试的时候比较有杀伤力的一个问题:聊聊你对AQS的理解?
之前有同学反馈,去互联网公司面试,面试官聊到并发时就问到了这个问题。当时那位同学内心估计受到了一万点伤害。。。
因为首先,很多人还真的连AQS是什么都不知道,可能听都没听说过。或者有的人听说过AQS这个名词,但是可能连具体全称怎么拼写都不知道。
更有甚者,可能会说:AQS?是不是一种思想?我们平时开发怎么来用AQS?
总体来说,很多同学估计都对AQS有一种云里雾里的感觉,如果用搜索引擎查一下AQS是什么?看几篇文章,估计就直接放弃了,因为密密麻麻的文字,实在是看不懂!
所以,基于上述痛点,咱们这篇文章,就用最简单的大白话配合N多张手绘图,给大家讲清楚AQS到底是什么?让各位同学面试被问到这个问题时,不至于不知所措。
ReentrantLock和AQS的关系
首先我们来看看,如果用Java并发包下的ReentrantLock来加锁和释放锁,是个什么样的感觉?
这个基本学过Java的同学应该都会吧,毕竟这个是java并发基本API的使用,应该每个人都是学过的,所以我们直接看一下代码就好了:

上面那段代码应该不难理解吧,无非就是搞一个Lock对象,然后加锁和释放锁。
你这时可能会问,这个跟AQS有啥关系?关系大了去了!因为Java并发包下很多API都是基于AQS来实现的加锁和释放锁等功能的,AQS是Java并发包的基础类。
举个例子,比如说ReentrantLock、ReentrantReadWriteLock底层都是基于AQS来实

本文通过大白话和手绘图详细讲解了ReentrantLock与AQS(AbstractQueuedSynchronizer)的关系及其加锁释放的底层原理。AQS是Java并发包的基础,用于实现并发组件如ReentrantLock、ReentrantReadWriteLock。文中通过线程加锁、释放锁的过程,阐述了AQS中的state变量、加锁线程变量和等待队列如何确保锁的互斥和可重入特性。
最低0.47元/天 解锁文章
170万+

被折叠的 条评论
为什么被折叠?



