ConcurrentHashMap jdk 8使用TreeNodes而不是List ..为什么?
嗨,我知道在JDK 8之前ConcurrentHashMap
的工作方式。我也理解了代码:它非常模块化,不太难理解。
JDK 8中的ConcurrentHashMap
代码与之前的实现相比发生了很大变化。
因为这个问题被归类为过于宽泛,我现在会尝试非常具体。
CHMv8使用TreeBin(RedBlackTree的变体)来存储桶而不是链表。
所以我的问题是在链表上使用TreeBin的主要优势是什么?
源代码在这里
主要的变化是添加新的Java 8默认Map
方法的ConcurrentHashMap
特定实现,以及依赖于内部细节的更好的并发实现。 这些更改需要大量新的内部类,这些内部类会膨胀.java文件
例如,其中一些方法包括:
compute(K key,BiFunction remappingFunction)
forEach(BiConsumer行动)
合并(K键,V值,BiFunction重映射function)
仅举几个。
我认为这也说明了为什么你通常不应该关心你不必维护的课程的实现细节。 只要该类遵循其javadoc中规定的合同,您应该不知道它是如何工作的,因为实现细节将来可能会发生变化。