AQS資料結構及實現原理?

2021-10-05 14:06:02 字數 773 閱讀 3670

aqs是乙個同步器,核心資料結構是雙向鍊錶+state(鎖狀態)

提供了一種框架,自定義了先進先出的同步佇列,讓獲取不到鎖的執行緒能進入同步佇列中排隊;

同步器有個狀態字段,我們可以通過狀態字段來判斷能否得到鎖,此時設計的關鍵在於通過把狀態宣告為 volatile,在鎖裡面修改狀態值來保證執行緒安全的;

子類可以通過給狀態 cas 賦值來決定能否拿到鎖,比如定義狀態值是 0 可以獲得鎖,狀態值是 1 就獲取不到鎖;

子類可以新建非 public 的內部類來繼承 aqs,從而實現鎖的功能;

aqs 提供了排它模式和共享模式兩種鎖模式。排它模式下:只有乙個執行緒可以獲得鎖,共享模式可以讓多個執行緒獲得鎖,子類 readwritelock 實現了兩種模式;

內部類 conditionobject 可以被用作 condition,我們通過 new conditionobject () 即可得到條件佇列;

aqs 實現了鎖、排隊、鎖佇列等框架,至於如何獲得鎖、釋放鎖的**並沒有實現,比如 tryacquire、tryrelease、tryacquireshared、tryreleaseshared、isheldexclusively 這些方法,aqs 中預設拋 unsupportedoperationexception 異常,都是需要子類去實現的;

aqs 繼承 abstractownablesynchronizer 是為了方便跟蹤獲得鎖的執行緒,可以幫助監控和診斷工具識別是哪些執行緒持有了鎖;

aqs 同步佇列和條件佇列,獲取不到鎖的節點在入隊時是先進先出,但被喚醒時,可能並不會按照先進先出的順序執行。

RoaringBitmap資料結構及原理

每個roaringbitmap github鏈結 中都包含乙個roaringarray,名字叫highlowcontainer。highlowcontainer儲存了roaringbitmap中的全部資料。roaringarray highlowcontainer 這個名字意味著,會將32位的整形 ...

RoaringBitmap資料結構及原理

首先 每個roaringbitmap github鏈結 中都包含乙個roaringarray,名字叫highlowcontainer。highlowcontainer儲存了roaringbitmap中的全部資料。roaringarray highlowcontainer 這個名字意味著,會將32位的...

資料結構複習 交換排序原理及C 實現

兩兩比較key值,如果發生逆序 排列的順序與期望的順序相反 就交換,知道所有物件都排序完畢!常見的3種交換排序演算法 氣泡排序,shaker排序和快速排序。設待排序列中有 n 個物件,首先比較物件v n 1 和v n 2 如果v n 1 此種排序是對氣泡排序的改進,氣泡排序每次只能從乙個方向進行遍歷...