底层是数组
+链表或红黑树
。它是通过 CAS 或 synchronized 来实现线程安全的,并且它的锁粒度更小,查询性能也更高。
从结构上看,和JDK1.8的HashMap结构非常类似,ConcurrentHashMap都是Node
1.8 在 1.7 的数据结构上做了大的改动,采用红黑树之后可以保证查询效率(O(logn)), 甚至取消了 ReentrantLock 改为了 synchronized,这样可以看出在新版的 JDK 中对 synchronized 优化是很到位的!
加锁是给数组中的每一个头节点都加锁