ConcurrentHashMap儲存原理

2021-09-18 05:06:35 字數 656 閱讀 7861

concurrenthashmap是併發雜湊對映表的實現,它允許多執行緒環境完全併發讀取,並且支援16個執行緒併發更新。相對於hashtable和同步包包裝的hashmap(collections.synchronizedmap(new hashmap())具有更高的併發性。在hashtable和同步包包裝的hashmap中使用全域性鎖同步不同執行緒間的併發訪問,concurrenthashmap使用16內部類segment實現儲存,使用16個分離鎖,所以同時執行16個執行緒訪問,乙個concurrenthashmap物件相對於16個hashtable物件。

concurrenthashmap的高併發性主要取決於如下三方面:

1、使用分離鎖實現多執行緒更深層次併發訪問

2、使用concurrenthashmap的內部類hashentry儲存物件,hashentry的不變性降低了讀執行緒在遍歷鍊錶時加鎖需求

3、通過對同乙個volatile變數的讀寫訪問,協調不同執行緒間讀寫操作的記憶體可見性。

concurrenthashmap預設建立包含16個segment物件陣列,每個segment的成員物件陣列table包含若干個雜湊表的桶,每個桶是由內部類hashentry鏈結起來的乙個鍊錶。

ConcurrentHashMap實現原理

concurrenthashmap實現原理 在jdk1.7中 concurrenthashmap是通過segment陣列 hashentry陣列 單鏈表的結構進行儲存資料。segment陣列中存放的是hashentry陣列的首位址,hashentry中存放的是乙個單鏈表 首節點位址 put 我們通過...

ConcurrentHashMap 實現原理

由於hashmap是乙個執行緒不安全的容器,主要體現在容量大於總量 負載因子發生擴容時會出現環形鍊錶從而導致死迴圈。因此需要支援執行緒安全的併發容器concurrenthashmap。如圖所示,是由segment陣列 hashentry陣列組成,和hashmap一樣,仍然是陣列加鍊表組成。concu...

ConcurrentHashMap底層原理

出自jdk5新引進的concurrent包,concurrenthashmap主要解決了兩個問題 相較於只使用synchronized的hashtable提高了效能,根據具體場景進行不同的設計,盡量避免了重量級鎖。不同於hashmap,採用了fail safe弱一致性迭代器,再迭代器使用過程中,可以...