JDK1.8ConcurrentHashMap源碼剖析

源於螞蟻課堂的學習,點擊這裏查看(老餘很給力)

1.源碼剖析

a.put

b.initTable

 

2.總結

ConcurrentHashMap的底層原理類似於hashMap8,但它是線程安全的,具體體現
1.爲數組初始化或擴容時,採用CAS去方式多線程修改共享數據
2.爲數組index對應的node賦值時,會將node使用同步代碼塊加鎖
3.若線程1在擴容,其他線程進來後,發現得到的node的hash爲-1,則跑去幫忙擴容
    具體:按照指定長度(16)去幫忙,即每個線程按照約定領取自己的任務(數組長度16的index範圍)
         做完此次任務,進行判斷是否繼續幫忙

 

3.對比JDK1.7 

看過1.7版本的ConcurrentHashMap源碼的讀者,相信明白,其實現原理是採用分段鎖機制
即,其內部維護了16個segment對象,而segment的功能近似hashtable,所以相當於每個segment內部是線程安全的。

ConcurrentHashMap---->segment----->HashEntry

1.7版本在segment內部實現syc的鎖,而1.8採用cas無鎖機制+node節點的上鎖,使其上鎖粒度更爲精細,效率更高

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章