ConcurrentMap原始碼解讀

2021-08-14 19:41:12 字數 681 閱讀 2767

concurrentmap原始碼解讀

1、concurrentmap按segment進行鎖定

2、concurrentmap讀非空值不鎖,讀到空值會進行鎖定(why)

這是因為hashentry還沒有完全構造完成就賦值導致的

3、concurrentmap在對hash表進行修改時,會更新modcount的值 ,意義?

8、concurrentmap的避免aba問題。方法isempty()有可能map從來沒有為空的時候,但返回為true;如果沒有modcurrent有兩個segment,此時segment1有乙個元素,segment0為空。在遍歷完segment0時,segment0先加入乙個元素,segment1再刪除乙個元素,雖然map中一直有元素,但是統計為空。

盡量保證concurrentmap需要遍歷segment的準確性

4、concurrentmap的hash操作都是先對映到segment,再對映segment中的table陣列

5、concurrentmap相關操作也依賴2的冪,包括segment的數量必須是2的冪,table陣列的數量也必須是2的冪

6、concurrentmap  key集合,value集合,entry集合的很多操作都呼叫concurrentmap本身介面實現。entry的遍歷按table鏈,table陣列,segment陣列依次遍歷。遍歷過程中不關心資料出現變動的情況。

AbstractCollection原始碼分析

abstractcollection抽象類提供了collection的骨架實現,collection分析請看 這裡直接看它的 是如何實現的.public abstract iterator iterator 該方法沒有實現.public abstract int size 該方法沒有實現.publi...

ThreadPoolExecutor原始碼閱讀

執行緒池解決兩個問題 一是復用執行緒,減少建立銷毀執行緒帶來系統開銷 二是限定系統資源使用邊界,避免大量執行緒消耗盡系統記憶體 適用於互不依賴,執行時間短,不需要對執行緒控制操作的執行緒 新增任務時,1.若執行緒數量小於corepoolsize,則新增執行緒執行任務 2.若執行緒數量大於等於core...

OrangePi One Android 原始碼編譯

一 系統環境搭建參照 二 lichee原始碼編譯 1.檢視help build.sh h2.配置核心 cd linux 3.4 make arch arm menuconfig 進入配置頁面,上下移動列表,空格是選擇列表,左右移動選擇退出選項 3.首次編譯執行清除 在 lichee linux3.4...