3分钟理清AQS与其子类的那些事
AQSAbstractQueuedSynchronizer抽象队列同步器在JDK1.5中由Doug Lea实现它也是JUC包的底层基石是一套用来实现锁、同步器的模板框架。1、重识AQS我们常见的几个类如ReentrantLock、Semaphore和CountDownLatch它们表面上功能各不相同但是它们的核心设计都是基于AQS实现的那么什么是AQS呢通过一个简答的生活中例子来说明如下图所示假设我们去一些政府机构办理业务假设今天只有一个柜台对外开放并且柜台前有一个等候区这里就类似我们的AQS的核心模型在AQS中的state类似柜台的状态private volatile int state;AQS内部的state变量我们可以把它想象成柜台叫号机当state0表示柜台空闲状态此时柜台资源可用提供服务此时叫号机呼叫用户A上来办理业务当用户A在办理业务的时候此时state1表示柜台有人在办理业务后续的用户需要等待用户A办理业务结束。 用户A办理业务中其他的用户只能在等候区排队类比AQS等候区这就是AQS中CLH队列双向等待队列如下图所示CLH队列是一个双向的链表每个排队的线程都被封装成一个Node对象CLH队列中是先进先出机制。AQS中线程完整的流程如下图所示当一个线程A过来的时候线程A检查state是不是0如果是0表示线程A获取到了锁此时立马把state改成1然后开始执行业务逻辑如果state是1表示线程A获取锁失败此时线程A打包成一个Node然后去CLH队列队尾排队。2、AQS的设计Java并发包的作者Doug Lea设计的非常优秀他把AQS中state和队列这2个东西抽出来放在父类里这是经典的模板方法设计模式如下图所示AQS作为父类它把最通用的活全部做好了如线程的排队、入队、出队、阻塞线程和唤醒线程这些非常复杂的逻辑都写好了这样子类如ReentrantLock它只需要实现一些最简单的逻辑如修改state的值子类只需要实现tryAcquire()尝试获取使用tryRelease()尝试释放子类使用这两个方法就能修改state的值。 同样使用AQS作为父类ReentrantLock和CountDownLatch实现了不同功能aReentrantLock独占所它的规则是我占了别人就不能占有所以他的tryAcquire()逻辑是只要state是0表示线程就可以抢到了锁然后将state值改成1这样别人就无法再抢到锁。bCountDownLatch共享锁它的规则是它的逻辑是只有当state减到了0所有的线程才能一起通过。我们都知道没有拿到锁的线程会在队列中等待获取锁那么排在队列中的线程是在“死循环”空转其实在队列中这些线程它们都在睡眠挂起状态使用到了一个秘密大武器即就是LockSupport.park()当线程需要等待时AQS会调用这个方法此时它不是空转而是直接向操作系统发指令核心的内容是“请把这个线程挂起暂时不要给它分配任何CPU时间片”。然后使用LockSupport.unpark(thread)当锁被释放时持有锁的线程会调用这个方法“唤醒队列中的下一个等待线程。这种线程调度由操作系统内核完成几乎不消耗CPU资源。3、AQS加锁到释放的全过程1线程A到来的时候首先拿到state0抢到锁后设为state1开始执行自己的业务逻辑2线程B到了检查state的时候发现state1自己不能抢到锁。3AQS把线程B打包成node放到队列里4AQS调用LockSupport.park() 线程B在队列中处于睡眠状态。5线程A执行完自己的业务逻辑后将state改成06AQS发现队列里还有等待执行任务的线程于是调用LockSupport.unpark(thread)7线程B被唤醒后拿到state0设置state1开始执行自己的业务逻辑。总结1AQS用state标识是否可以获取锁state0标识可以获取锁用CLH队列存放无法获取锁的线程等待区2AQS用了模板方法模式实现了父类管排队子类管规则3AQS用了LockSupport.park()和LockSupport.unpark(thread)来实现高效的线程阻塞和唤醒。学AI大模型的正确顺序千万不要搞错了2026年AI风口已来各行各业的AI渗透肉眼可见超多公司要么转型做AI相关产品要么高薪挖AI技术人才机遇直接摆在眼前有往AI方向发展或者本身有后端编程基础的朋友直接冲AI大模型应用开发转岗超合适就算暂时不打算转岗了解大模型、RAG、Prompt、Agent这些热门概念能上手做简单项目也绝对是求职加分王给大家整理了超全最新的AI大模型应用开发学习清单和资料手把手帮你快速入门学习路线:✅大模型基础认知—大模型核心原理、发展历程、主流模型GPT、文心一言等特点解析✅核心技术模块—RAG检索增强生成、Prompt工程实战、Agent智能体开发逻辑✅开发基础能力—Python进阶、API接口调用、大模型开发框架LangChain等实操✅应用场景开发—智能问答系统、企业知识库、AIGC内容生成工具、行业定制化大模型应用✅项目落地流程—需求拆解、技术选型、模型调优、测试上线、运维迭代✅面试求职冲刺—岗位JD解析、简历AI项目包装、高频面试题汇总、模拟面经以上6大模块看似清晰好上手实则每个部分都有扎实的核心内容需要吃透我把大模型的学习全流程已经整理好了抓住AI时代风口轻松解锁职业新可能希望大家都能把握机遇实现薪资/职业跃迁这份完整版的大模型 AI 学习资料已经上传CSDN朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】