ConcurrentHashMap內部數據結構是hashTable,但是與hashTable不同的是CurrentHashMap使用了鎖分離技術,即:使用多個不同的鎖來控制對HashTable的不同部分進行修改,其內部的不同部分使用Segment來表示。這樣一個大的HashTable就會被分爲多個小的HahTable,每個鎖作用在不同的小HashTable上。當多個操作發生在不同的Segment上,就可以進行併發操作了。
但是有些操作例如:size(),需要將整個表鎖定,先按順序鎖定每個段的,然後進行操作,操作完後再按順序釋放所有段的鎖。
ConcurrentHashMap實際上就是將一個大HashTable分割成多個小的HashTable,然後在每個小的HashTable上加鎖,實現鎖分離。
ConcurrentHashMap的實現方式:
ConcurrentHashMap主要有三個實體類:ConcurrentHashMap(整個Hash表),Segment(桶),HashEntry(節點)。
應用場景:當有一個大數組或集合需要多個線程共享