AQS

例如 ReentrantLock、CountDownLatch、CycleBarrier 底層都是通過(guò)AQS來(lái)實(shí)現(xiàn)的
AQS的核心思想:如果被請(qǐng)求的共享資源空閑,則將當(dāng)前請(qǐng)求的資源的線程設(shè)置為有效的工作線程,并將共享資源設(shè)置為鎖定狀態(tài),如果被請(qǐng)求的共享資源被占用,那么就需要一套線程阻塞等待以及喚醒時(shí)鎖分配的機(jī)制,這個(gè)AQS是用CLH隊(duì)列鎖實(shí)現(xiàn)的,即將暫時(shí)獲取不到的鎖的線程加入到隊(duì)列中。CLH隊(duì)列是一個(gè)虛擬的雙向隊(duì)列,虛擬的雙向隊(duì)列即不存在隊(duì)列的實(shí)例,僅存在節(jié)點(diǎn)之間的關(guān)聯(lián)關(guān)系。

AQS是將每一條請(qǐng)求共享資源的線程封裝成一個(gè)CLH鎖隊(duì)列的一個(gè)結(jié)點(diǎn)(Node),來(lái)實(shí)現(xiàn)鎖的分配

用大白話來(lái)說(shuō),AQS就是基于CLH隊(duì)列,用volatile修飾共享變量state,線程通過(guò)CAS去改變狀態(tài)符,成功則獲取鎖成功,失敗則進(jìn)入等待隊(duì)列,同時(shí)等待被喚醒。

注意:AQS是自旋鎖,在等待喚醒的時(shí)候,經(jīng)常會(huì)使用自旋的方式,不斷的嘗試獲取鎖,直到被其它線程獲取成功

實(shí)現(xiàn)了AQS的鎖有:自旋鎖、互斥鎖、讀寫(xiě)鎖、條件變量、信號(hào)量、柵欄都是AQS的衍生物

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 學(xué)習(xí) AQS 之前, 需要對(duì)以下幾點(diǎn)內(nèi)容都有所了解. 本章內(nèi)容將先從以下幾點(diǎn)開(kāi)始然后逐步到 AQS. CAS 概念...
    __Y_Q閱讀 741評(píng)論 0 4
  • @[TOC] 1. AQS介紹 AQS 的全程為 (AbstractQueuedSynchronizer)這個(gè)...
    浪人與酒丶閱讀 456評(píng)論 0 0
  • 什么是AQS? AQS(AbstractQueuedSynchronizer): 是并發(fā)容器J.U.C(java....
    Duanty閱讀 810評(píng)論 0 0
  • 為什么需要AQS 鎖和協(xié)作類(lèi)有共同點(diǎn):閘門(mén)像ReentrantLock和Semaphore有一些共同點(diǎn),并且很相似...
    小波同學(xué)閱讀 1,526評(píng)論 0 10
  • 表情是什么,我認(rèn)為表情就是表現(xiàn)出來(lái)的情緒。表情可以傳達(dá)很多信息。高興了當(dāng)然就笑了,難過(guò)就哭了。兩者是相互影響密不可...
    Persistenc_6aea閱讀 129,752評(píng)論 2 7

友情鏈接更多精彩內(nèi)容