1. 程式人生 > 實用技巧 >ConcurrentHashMap執行緒安全的具體實現⽅式/底層具體實現

ConcurrentHashMap執行緒安全的具體實現⽅式/底層具體實現

JDK8以前,ConcurrentHashMap是由Segment陣列結構和HashEntry陣列結構組成。首先將資料分為一段一段的儲存,然後給每一段資料配一把鎖,當一個執行緒佔用鎖訪問其中一個段資料時,其他段的資料也能被其他段訪問。Segment是一種陣列+連結串列結構,實現了ReentrantLock介面,是一種可重入鎖;HashEntry儲存鍵值對資料。

JDK8以後,ConcurrentHashMap取消了Segment分段鎖,採用CAS和synchronized保證併發安全。資料結構採用陣列+連結串列/紅黑樹,當連結串列長度大於閾值8的時候,連結串列轉換為紅黑樹。synchronized只鎖定當前連結串列/紅黑樹的首節點,這樣只要hash不衝突就不會產生併發,效率有又提高了很多。