併發容器類Map

2021-10-01 18:50:15 字數 838 閱讀 1212

hashmap

concurrenthashmap

認識了解concurrentskiplistmap

執行緒不安全:擴容時是非原子操作,會存在資料不完整,讀的時候會存在問題,執行緒不安全。

從抽象角度,帶著問題看原始碼,看最熟悉的方法,主要關注是什麼而不是為什麼這麼做。

jdk1.7版本

儲存資料結構:資料entry entry和鍊錶結構,即陣列加鍊表結構。

hash值:雜湊值,很難重複。

取模:計算陣列下標。

hash碰撞:即使hash值不同,也可能下標相同。

擴容條件:是否達到指定的閾值,達到則擴容2倍。

jdk1.8版本

最大區別:當鍊表的長度大於8時,將鍊錶轉換成紅黑樹,提公升查詢的效率。

jdk1.7版本

執行緒安全:使用分段鎖來保證執行緒安全。

儲存資料方式:segmentsegment,此陣列的長度也是併發級別,確定之後不可改變,預設值16,乙個特殊的hashtable,使用分段鎖的技術,太多併發級別消耗效能,

擴容:segments陣列加鍊表的結構,原理和hashmap類似。

jdk1.8版本

執行緒安全:通過cas爭搶鍊錶頭部,失敗後,使用synchronzed關鍵字鎖住鍊錶頭部,即使用cas+synchronzed達到執行緒安全,只是針對其中的乙個鍊錶加鎖,可以很好的擴容。

儲存資料方式:陣列+鍊錶結構,煉表達到一定的閾值會轉換成紅黑樹。

擴容:陣列擴容,通過forwarding來實現擴容的執行緒安全。

跳表作用:執行緒安全,保證key的順序,treemap能保證key的順序,但是執行緒不安全。

通過key對資料進行排序,建立索引。

008 J U C 之併發容器類 Map

1.演繹推導法 2.歸納總結法 3.模擬法1.涉及內容 資料要儲存 陣列的插入和查詢 雜湊衝突,陣列位置已存在值。合理控制陣列和鍊錶的長度。1.copyonwritearraylist 優缺點 缺點 2.copyonwritearraylist 原理分析 實現原理 特點hashset 基於 hash...

同步類容器和併發類容器

同步類容器都是執行緒安全的,但是某些場景下可能需要加鎖來保護復合操作。復合類操作如 迭代 反覆訪問元素,遍歷完容器中所有的元素 跳轉 根據指定的順序找到當前元素的下乙個元素 以及條件運算。這些復合操作在多執行緒併發地修改容器時,可能會表現出意外的行為,最經典的便是concurrentmodifica...

同步類容器和併發類容器

同步類容器都是執行緒安全的,但在某些場景下可能需要加鎖來保護復合操作。復合類操作。如 迭代 反覆訪問元素,遍歷完容器中所有的元素 跳轉 根據指定的順序找到當前元素的下乙個元素 以及條件運算。這些復合操作在多執行緒併發地修改容器時,可能會表現出意外的行為,最經典的便是concurrentmodific...