回覆列表
  • 1 # 另類猿

    CurrentHashMap是執行緒安全的。當多個執行緒同時更新一個數據時不會出現同時獲得修改的情況。在Java7和Java8中結構是不一樣的,Java8中做了很大的最佳化。

    Java7中的結構

    1.ConcurrentHashMap採用了陣列+連結串列+Segment+分段鎖的方式實現。

    2.加鎖的操作鎖住的是一個 segment,不會對整個結構進行加鎖,其他的Segment 還是可以正常操作的,這樣即保證了執行緒的安全性,又提高了效率。

    3.但是定位會比較麻煩,一個元素定位要進行兩次Hash操作,第一次Hash定位到Segment,第二次Hash定位到元素所在的連結串列的頭部。

    Java8中的結構

    1.java8中採用了陣列+連結串列+紅黑樹的設計,執行緒安全採用了CAS來實現。

    2.原本Java7中採用的Segment加鎖,現調整為對每個陣列元素加鎖。

    3.和java8中的hashmap一樣採用了紅黑樹的結構,查詢效率更快。當連結串列節點數量大於8時,會將連結串列轉化為紅黑樹進行儲存,但Hash衝突加劇。

    4.查詢時間複雜度:從原來的遍歷連結串列O(n),變成遍歷紅黑樹O(logN)。

  • 中秋節和大豐收的關聯?
  • 懷孕三個月喝紅酒會有事嗎?