ConcurrentHashMap
ConcurrentHashMap是一个线程安全的Hash Table,它的主要功能是提供了一组和HashTable功能相同可是线程安全的方法。ConcurrentHashMap能够作到读取数据不加锁,而且其内部的结构可让其在进行写操做的时候可以将锁的粒度保持地尽可能地小,不用对整个ConcurrentHashMap加锁。数组
ConcurrentHashMap的内部结构
ConcurrentHashMap为了提升自己的并发能力,在内部采用了一个叫作Segment的结构,一个Segment其实就是一个类Hash Table的结构,Segment内部维护了一个链表数组,咱们用下面这一幅图来看下ConcurrentHashMap的内部结构: 安全
从上面的结构咱们能够了解到,ConcurrentHashMap定位一个元素的过程须要进行两次Hash操做,第一次Hash定位到Segment,第二次Hash定位到元素所在的链表的头部,所以,这一种结构的带来的反作用是Hash的过程要比普通的HashMap要长,可是带来的好处是写操做的时候能够只对元素所在的Segment进行加锁便可,不会影响到其余的Segment,这样,在最理想的状况下,ConcurrentHashMap能够最高同时支持Segment数量大小的写操做(恰好这些写操做都很是平均地分布在全部的Segment上),因此,经过这一种结构,ConcurrentHashMap的并发能力能够大大的提升。并发