ConcurrentMap源碼解讀

ConcurrentMap源碼解讀
1、ConcurrentMap按segment進行鎖定
2、ConcurrentMap讀非空值不鎖,讀到空值會進行鎖定(WHY)
這是因爲HashEntry還沒有完全構造完成就賦值導致的
3、ConcurrentMap在對Hash表進行修改時,會更新modCount的值 ,意義?
8、ConcurrentMap的避免ABA問題。方法isEmpty()有可能MAP從來沒有爲空的時候,但返回爲true;如果沒有modcurrent有兩個segment,此時Segment1有一個元素,Segment0爲空。在遍歷完Segment0時,Segment0先加入一個元素,Segment1再刪除一個元素,雖然map中一直有元素,但是統計爲空。
儘量保證ConcurrentMap需要遍歷segment的準確性
4、ConcurrentMap的HASH操作都是先映射到segment,再映射segment中的table數組
5、ConcurrentMap相關操作也依賴2的冪,包括segment的數量必須是2的冪,table數組的數量也必須是2的冪
6、ConcurrentMap  key集合,value集合,entry集合的很多操作都調用ConcurrentMap本身接口實現。entry的遍歷按table鏈,table數組,segment數組依次遍歷。遍歷過程中不關心數據出現變動的情況。

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