在ConcurrentHashMap沒有出現之前,jdk使用hashtable來實現線程安全,可是hashtable是將整個hash表鎖住,因此效率很低下。數組
ConcurrentHashMap將數據分別放到多個Segment中,默認16個,每個Segment中又包含了多個HashEntry列表數組,安全
對於一個key,須要通過三次hash操做,才能最終定位這個元素的位置,這三次hash分別爲:線程
每個Segment都擁有一個鎖,當進行寫操做時,只須要鎖定一個Segment,而其它Segment中的數據是能夠訪問的。hash