
AQSAbstractQueuedSynchronizer抽象隊列同步器在JDK1.5中由Doug Lea實現(xiàn)它也是JUC包的底層基石是一套用來實現(xiàn)鎖、同步器的模板框架。1、重識AQS我們常見的幾個類如ReentrantLock、Semaphore和CountDownLatch它們表面上功能各不相同但是它們的核心設計都是基于AQS實現(xiàn)的那么什么是AQS呢通過一個簡答的生活中例子來說明如下圖所示假設我們?nèi)ヒ恍┱畽C構(gòu)辦理業(yè)務假設今天只有一個柜臺對外開放并且柜臺前有一個等候區(qū)這里就類似我們的AQS的核心模型在AQS中的state類似柜臺的狀態(tài)private volatile int state;AQS內(nèi)部的state變量我們可以把它想象成柜臺叫號機當state0表示柜臺空閑狀態(tài)此時柜臺資源可用提供服務此時叫號機呼叫用戶A上來辦理業(yè)務當用戶A在辦理業(yè)務的時候此時state1表示柜臺有人在辦理業(yè)務后續(xù)的用戶需要等待用戶A辦理業(yè)務結(jié)束。 用戶A辦理業(yè)務中其他的用戶只能在等候區(qū)排隊類比AQS等候區(qū)這就是AQS中CLH隊列雙向等待隊列如下圖所示CLH隊列是一個雙向的鏈表每個排隊的線程都被封裝成一個Node對象CLH隊列中是先進先出機制。AQS中線程完整的流程如下圖所示當一個線程A過來的時候線程A檢查state是不是0如果是0表示線程A獲取到了鎖此時立馬把state改成1然后開始執(zhí)行業(yè)務邏輯如果state是1表示線程A獲取鎖失敗此時線程A打包成一個Node然后去CLH隊列隊尾排隊。2、AQS的設計Java并發(fā)包的作者Doug Lea設計的非常優(yōu)秀他把AQS中state和隊列這2個東西抽出來放在父類里這是經(jīng)典的模板方法設計模式如下圖所示AQS作為父類它把最通用的活全部做好了如線程的排隊、入隊、出隊、阻塞線程和喚醒線程這些非常復雜的邏輯都寫好了這樣子類如ReentrantLock它只需要實現(xiàn)一些最簡單的邏輯如修改state的值子類只需要實現(xiàn)tryAcquire()嘗試獲取使用tryRelease()嘗試釋放子類使用這兩個方法就能修改state的值。 同樣使用AQS作為父類ReentrantLock和CountDownLatch實現(xiàn)了不同功能aReentrantLock獨占所它的規(guī)則是我占了別人就不能占有所以他的tryAcquire()邏輯是只要state是0表示線程就可以搶到了鎖然后將state值改成1這樣別人就無法再搶到鎖。bCountDownLatch共享鎖它的規(guī)則是它的邏輯是只有當state減到了0所有的線程才能一起通過。我們都知道沒有拿到鎖的線程會在隊列中等待獲取鎖那么排在隊列中的線程是在“死循環(huán)”空轉(zhuǎn)其實在隊列中這些線程它們都在睡眠掛起狀態(tài)使用到了一個秘密大武器即就是LockSupport.park()當線程需要等待時AQS會調(diào)用這個方法此時它不是空轉(zhuǎn)而是直接向操作系統(tǒng)發(fā)指令核心的內(nèi)容是“請把這個線程掛起暫時不要給它分配任何CPU時間片”。然后使用LockSupport.unpark(thread)當鎖被釋放時持有鎖的線程會調(diào)用這個方法“喚醒隊列中的下一個等待線程。這種線程調(diào)度由操作系統(tǒng)內(nèi)核完成幾乎不消耗CPU資源。3、AQS加鎖到釋放的全過程1線程A到來的時候首先拿到state0搶到鎖后設為state1開始執(zhí)行自己的業(yè)務邏輯2線程B到了檢查state的時候發(fā)現(xiàn)state1自己不能搶到鎖。3AQS把線程B打包成node放到隊列里4AQS調(diào)用LockSupport.park() 線程B在隊列中處于睡眠狀態(tài)。5線程A執(zhí)行完自己的業(yè)務邏輯后將state改成06AQS發(fā)現(xiàn)隊列里還有等待執(zhí)行任務的線程于是調(diào)用LockSupport.unpark(thread)7線程B被喚醒后拿到state0設置state1開始執(zhí)行自己的業(yè)務邏輯??偨Y(jié)1AQS用state標識是否可以獲取鎖state0標識可以獲取鎖用CLH隊列存放無法獲取鎖的線程等待區(qū)2AQS用了模板方法模式實現(xiàn)了父類管排隊子類管規(guī)則3AQS用了LockSupport.park()和LockSupport.unpark(thread)來實現(xiàn)高效的線程阻塞和喚醒。學AI大模型的正確順序千萬不要搞錯了2026年AI風口已來各行各業(yè)的AI滲透肉眼可見超多公司要么轉(zhuǎn)型做AI相關(guān)產(chǎn)品要么高薪挖AI技術(shù)人才機遇直接擺在眼前有往AI方向發(fā)展或者本身有后端編程基礎的朋友直接沖AI大模型應用開發(fā)轉(zhuǎn)崗超合適就算暫時不打算轉(zhuǎn)崗了解大模型、RAG、Prompt、Agent這些熱門概念能上手做簡單項目也絕對是求職加分王給大家整理了超全最新的AI大模型應用開發(fā)學習清單和資料手把手幫你快速入門學習路線:?大模型基礎認知—大模型核心原理、發(fā)展歷程、主流模型GPT、文心一言等特點解析?核心技術(shù)模塊—RAG檢索增強生成、Prompt工程實戰(zhàn)、Agent智能體開發(fā)邏輯?開發(fā)基礎能力—Python進階、API接口調(diào)用、大模型開發(fā)框架LangChain等實操?應用場景開發(fā)—智能問答系統(tǒng)、企業(yè)知識庫、AIGC內(nèi)容生成工具、行業(yè)定制化大模型應用?項目落地流程—需求拆解、技術(shù)選型、模型調(diào)優(yōu)、測試上線、運維迭代?面試求職沖刺—崗位JD解析、簡歷AI項目包裝、高頻面試題匯總、模擬面經(jīng)以上6大模塊看似清晰好上手實則每個部分都有扎實的核心內(nèi)容需要吃透我把大模型的學習全流程已經(jīng)整理好了抓住AI時代風口輕松解鎖職業(yè)新可能希望大家都能把握機遇實現(xiàn)薪資/職業(yè)躍遷這份完整版的大模型 AI 學習資料已經(jīng)上傳CSDN朋友們?nèi)绻枰梢晕⑿艗呙柘路紺SDN官方認證二維碼免費領取【保證100%免費】