天天看點

每天一道面試題,周五打卡沖沖沖!AQS的原理是什麼?AQS(AbstractQueuedSynchronizer)的原理

作者:一個id

每天一道面試題,周五打卡沖沖沖!AQS 的原理是什麼?

AQS(AbstractQueuedSynchronizer)的原理是基于一個FIFO(先進先出)隊列和一個同步狀态(state)來實作線程的排隊和同步。

AQS的核心思想是,當線程嘗試擷取同步狀态時,如果同步狀态已經被其他線程占用,則将目前線程包裝成一個節點(Node)并入隊等待,否則直接擷取同步狀态。同時,AQS會確定隻有隊列中第一個節點的線程才能擷取同步狀态,其他節點需要等待前面的節點釋放同步狀态。

AQS的主要實作機制如下:

1. 内部隊列:AQS維護一個FIFO隊列,用于存儲等待擷取同步狀态的線程。每個線程通過Node對象來表示,并包含了線程的引用和狀态資訊。

2. 同步狀态(state):AQS内部維護一個同步狀态,用于表示同步資源的狀态。不同的同步器可以根據自己的需求使用同步狀态來表示不同的含義,如鎖的可重入次數、Semaphore的可用許可數等。

3. CAS操作:AQS使用CAS(Compare and Swap)操作來實作對同步狀态的原子修改。CAS操作通過比較記憶體中的值與期望值,如果相等則進行修改,否則不進行修改。

4. 線程排程:AQS通過自旋(自旋鎖)和阻塞(等待隊列)兩種方式來進行線程的排程。當線程無法擷取同步狀态時,會進入阻塞狀态,直到被前面的節點喚醒。在自旋期間,線程會不斷嘗試擷取同步狀态,避免線程切換的開銷。

#java #程式員 #學習打卡 #面試打卡

每天一道面試題,周五打卡沖沖沖!AQS的原理是什麼?AQS(AbstractQueuedSynchronizer)的原理
每天一道面試題,周五打卡沖沖沖!AQS的原理是什麼?AQS(AbstractQueuedSynchronizer)的原理
每天一道面試題,周五打卡沖沖沖!AQS的原理是什麼?AQS(AbstractQueuedSynchronizer)的原理

繼續閱讀