HashMap+concurrentHashMap 結構分析

易曉雙發表於2018-02-06

簡單回顧下hashmap的資料結構,具體底層的資料結構目前理解的還不是很透徹,本篇只做為本人筆記,僅供參考,本人資料結構 基礎很弱,後續領悟透徹,繼續完善。

1.jdk8對HashMap 做了優化,
    jdk7的結構是 陣列+連結串列,
    jdk8 是陣列+連結串列+紅黑樹,
複製程式碼

jdk1.7 concurrenthashmap概述

    1.寫操作時,通過鎖分段,提高效率,理想狀態下,可以支援16個執行緒執行併發寫操作,以及任意數量的讀操作。
複製程式碼

HashMap+concurrentHashMap 結構分析

    2.下圖是conurrenthashmap的結構:本質是一個segment陣列,總的來說,通過以下3個方面來保證高效性
     .通過鎖分段保證併發環境下的寫操作
     .通過HashEntry的不變性,volatile變數的記憶體可見性和加鎖重讀機制保證高效安全的讀操作
     .通過不加鎖和加鎖兩種方案控制跨段操作的的安全性。
複製程式碼

HashMap+concurrentHashMap 結構分析

    3.concurrentHashMap分析
        1.包含兩個核心靜態內部類 segment,HashEntry
        2.segment 繼承 ReentrantLock ,充當鎖的角色,每個sgement物件守護每個雜湊對映表的若干個桶。
        3.HashEntry用來封裝 K/V對。
        4.每個桶是由若干個 HashEntry 物件連結起來的連結串列。
複製程式碼

jdk1.8 concurrentHashMap分析

1.  1.8的實現已經拋棄了Segment分段鎖機制,利用CAS+Synchronized來保證併發更新的安全,底層採用陣列+連結串列+紅黑樹的儲存結構
2.  Z              c 複製程式碼

相關文章