ConcurrentHashMap是一个线程安全的容器,内部分成了多个Segment,Segment类似于HashTable,Segment实现了ReentrantLock,所以Segment本身就是一个锁结构,允许多个修改操作并发进行,只要多个修改操作在不同的Segment中进行就可以,ConcurrentHashMap锁的粒度保持的小,而不是对整个容器加锁。ConcurrentHashMap定位一个元素的过程需要进行两次Hash操作,第一次Hash定位到Segment,第二次Hash定位到元素所在的链表的头部,两次定位比普通的HashMap耗时要长,好处是写操作的时候可以只对元素所在的Segment进行加锁,不会影响到其他的Segment,并发能力可大大提高。
ConcurrentHashMap为了提高本身的并发能力,在内部采用了一个叫做Segment的结构,一个Segment其实就是一个类Hash Table的结构,
Segment内部维护了一个链表数组,Segment结构:
Segment中的元素是以HashEntry的形式存放在链表数组中的,
ConcurrentHashMap的get、put、remove都是先利用key的hash值找到对应的segment之后,再通过segment定位到要查找的元素。
参考链接:http://www.iteye.com/topic/1103980