在ConcurrentHashMap没有出现之前,jdk使用hashtable来实现线程安全,可是hashtable是将整个hash表锁住,因此效率很低下。数组
ConcurrentHashMap将数据分别放到多个Segment中,默认16个,每个Segment中又包含了多个HashEntry列表数组,安全
对于一个key,须要通过三次hash操做,才能最终定位这个元素的位置,这三次hash分别为:线程
每个Segment都拥有一个锁,当进行写操做时,只须要锁定一个Segment,而其它Segment中的数据是能够访问的。hash