concurrenthashmap原始碼分析
concurrenthashmap是乙個執行緒安全的、高可用hashmp;本部落格基於jdk1.8concurrenthash實現原理進行分析,如有不對,敬請斧
正。。。
(1)資料結構知識點
(1)hash演算法;
(2)鍊錶;
(3)陣列;
(4)二叉樹(紅黑二叉樹);
(2)多執行緒知識點
(1)鎖的應用(cas);
(2)volitate;
(3)大神的思想
(1)put(主要講解)
(2)get
(1)當不存在hash衝突時,為保證執行緒,則只需要保證元素的可見性即可(原因參加jvm虛擬機器模型),保證元素的讀寫可見性;
(2)當存在hash衝突時,為保證執行緒安全,不僅僅要保證元素的可見性,還要保證多個執行緒對同乙個節點操作的順序性;
(3)擴容是個費時費力的過程,但是大神通過多執行緒進行擴容和元素拷貝,極大的提高了效率;
(4)hash衝突問題,當在節點超過乙個閾值則將鍊錶轉變為紅黑樹,極大提高了檢索效率,將查詢速度提高到了o(logn);
(5)本類的設計均才用unsafe樂觀鎖實現,對變數寫操作;
(1)擴容問題效率已解決;
(2)對於沒有衝突的節點,執行緒安全、效率已經解決;
(3)對於hash衝突點,目前元素少才用鍊錶,當元素較多才用紅黑二叉樹,優化讀寫,對於該操作仍存在優化的點,後期可對該出進行優化操作,提公升效率。。。
後面想到優化點在做補充。。。
ConcurrentHashMap原始碼分析
hashmap 先說hashmap,hashmap是執行緒不安全 的,在併發環境下,可能會形成環狀鍊錶 hashtable hashtable和hashmap的實現原理幾乎一樣,差別無非是1.hashtable不允許key和value為null 2.hashtable是執行緒安全的。但是hashta...
ConcurrentHashMap原始碼詳解
成員變數private static final int maximum capacity 1 30 private static final int default capacity 16 static final int max array size integer.max value 8 pr...
concurrentHashMap原始碼分析
concurrenthashmap是hashmap的執行緒安全版本,內部也是使用 陣列 鍊錶 紅黑樹 的結構來儲存元素。相比於同樣執行緒安全的hashtable來說,效率等各方面都有極大地提高。在這裡可以使用上篇那個 進行測試,根據結果可以知道concurrenthashmap是執行緒安全的,由於分...