JDK ConcurrentHashMap详解

首先先上ConcurrentHashMap的继承关系图:


JDK ConcurrentHashMap详解_第1张图片
ConcurrentHashMap的继承关系图

可以看到相当于HashMap来说少了Cloneable接口,即说明ConcurrentHashMap是不支持clone的
与HashMap相比都实现了AbstractMap但是ConcurrentHashMap多了增加了自己的一些实现,来自于ConcurrentMap接口

put方法实现:
put调用了putVal方法实现,采用了分段加锁,即对当前操作的哈希桶进行加锁(通过CAS对哈希桶首元素加锁实现对整个哈希桶的加锁),这样当多线程的情况下相对于HashTable的全表加锁来说效率提升了很多,减少了锁碰撞的概率。
内部的实现和HashTable非常相似,除了添加了锁逻辑处理(类似于U.compareAndSwapObject(tab, ((long)i << ASHIFT) + ABASE, c, v)这种的函数来处理潜在的并发问题),同时在达到一定阈值的时候同样链表被转换为红黑树,这里和HashMap基本上是一致的(JDK HashMap详解)

你可能感兴趣的:(JDK ConcurrentHashMap详解)