ConcurrentHashMap是一个线程同步的容器,它的存储结构和HashMap类似,最大的差别是ConcurrentHashMap加上了分段锁(Segment)机制,每个Segment维护几个Entry。多个线程可以同时访问不同Segment上的数据,使之并发度更高。
1.Segment:
默认的并发个数是16,即默认有16个Segment。
//继承ReentrantLock(可重入锁)
static class Segment<K,V> extends ReentrantLock implements Serializable {
private static final long serialVersionUID = 2249069246763182397L;
final float loadFactor;
Segment(float lf) { this.loadFactor = lf; }
}
为了使HashEntry能够趋向均匀的分布在各个Segment上,ConcurrentHashMap会使用Wang/Jenkins hash的变种算法对元素的hashCode进行一次再哈希。
2.put操作: