1. 程式人生 > >CurrentHashMap學習筆記_未完

CurrentHashMap學習筆記_未完

由於HashMap並不是執行緒安全的,所以不能併發操作它。多執行緒程式設計推薦使用CurrentHashMap。

jdk 1.7 採用分段鎖技術,整個 Hash 表被分成多個段,給每一個段加個segment鎖,而不是把每一個元素加鎖,這樣做有什麼好處壞處?段與段之間可以併發訪問,這在一定程度上提高了執行效率,但是卻犧牲了部分執行緒安全性。所有的 put,get,remove 等方法都是根據鍵的 hash 值對應到相應的段中,然後嘗試獲取鎖進行訪問。可以理解為segment陣列中的每一個segment中都包含一個和HashMap類似的資料結構。

preview

jdk 1.8 取消了基於 Segment 的分段鎖思想,改用 CAS + synchronized 控制併發操作,在某些方面提升了效能。並且追隨 1.8 版本的 HashMap 底層實現,使用陣列+連結串列+紅黑樹進行資料儲存。

與HashMap中Node的區別

  1. val與next用volatile修飾,保證了可見性。
  2. 不支援setValue。
  3. find()方法用於map中的get()方法,在子類中被覆蓋