深入理解CAS與AQS

2021-10-20 21:41:18 字數 1142 閱讀 7095

二、aqs

首先,cas是一種演算法,不是鎖cas,其實是個簡稱,全稱是 compare and swap,對比之後交換資料

expect:期望更新的值(一開始獲取的值)

update:要更新的最新值

如果原子變數中的 value 值等於 expect,則使用 update 值更新該值並返回 true,否則返回 false。

通俗來講就是比如有乙個值 int x = 0;要對x進行++操作,那麼我就獲取這個x的值,作為expect,進行++操作以後,x 等於1,往回更新的時候看看此時的x是不是還是0,如果還是原來的值,就更新x為1,如果此時x的值不是0,而是100,那麼就是cas失敗,返回false

迴圈時間長開銷大只能保證乙個共享變數的原子操作應用場景最多,他的意思就是我在執行一次cas操作下,看看是否可以執行成功,如果執行不成功,那麼我就可以獲取最新的值,重複進行操作,直到成功為止。

aqs全稱為abstractqueuedsynchronizer,它的核心思想就是執行緒請求乙個共享資源,如果這個資源目前沒有被鎖定,是處於空閒狀態,那麼這個執行緒就占用這塊資源,並將這塊共享資源的狀態設定為鎖定狀態。如果這塊資源被占用,已經處於鎖定狀態,那麼這個執行緒就會被分配到乙個佇列裡面,等待被喚醒獲取這個鎖(aqs通過clh佇列鎖來實現,這個佇列是乙個fifo佇列,即先進先出)。

非公平鎖:當執行緒獲取鎖的時候,先通過cas操作去搶鎖,如果沒搶到再加入到佇列中等待被喚醒。

reentrantlock

共享

semaphore(訊號量)

countdownlatch(倒計時器)

cyclicbarrier(迴圈柵欄)

AQS深入理解

獨佔鎖的釋放 release方法 獨佔鎖的獲取與釋放總結 能響應中斷以及超時等待 共享鎖aqs實現的三個功能 對同步狀態的管理 對阻塞執行緒進行排隊 等待通知等底層功能的實現 aqs通過頭尾指標管理同步佇列的,獲取鎖失敗的執行緒入隊,釋放鎖對同步佇列中的執行緒進行通知 當共享資源被某個執行緒占有,其...

深入理解AQS原始碼解析一

三 最後小結一下 一 概念 我們談到併發,就不得不談reentrantlock鎖 而談到reentrantlock鎖,不得不談一下abstractqueuedsynchronized aqs 類如其名,抽象的佇列式的同步器,aqs定義了一套多執行緒訪問共享資源的同步器框架,許多同步類實現都依賴於它,...

8 深入理解juc 基於aqs的執行緒同步工具

1.hmaster在ha的情況下,掛了一台另一台可以立刻頂上。2.hmaster兩台全掛的情況下,對讀寫資料沒有任何影響,但是如果此時regionserver也掛了會報錯,並且影響讀寫。3.regionserver只要有一台存在,就可以讀寫資料。在其他regionserver掛了的時候,活著的reg...