ConcurrentHashMap jdk 8使用TreeNodes而不是List ..为什么?

时间:2014-07-21 19:05:22

标签: java multithreading concurrency java.util.concurrent concurrenthashmap

我知道JDK 8之前ConcurrentHashMap的工作原理。 我也理解了代码:它非常模块化,不太难理解。

JDK 8中的ConcurrentHashMap代码与之前的实现相比发生了很大变化。

由于这个问题被归类为过于宽泛,我现在会尝试非常具体。

CHMv8使用TreeBin(RedBlackTree的变体)作为存储桶而不是链表。

所以我的问题是在链表上使用TreeBin的主要优点是什么?

Source code here

1 个答案:

答案 0 :(得分:4)

主要更改是添加ConcurrentHashMap新Java 8默认Map方法的特定实现,以及依赖于内部详细信息的更好的并发实现。这些更改需要许多新的内部类,这些内部类会膨胀.java文件

例如,其中一些方法包括:

compute(K key, BiFunction remappingFunction)

forEach(BiConsumer action)

merge(K key, V value, BiFunction remappingFunction)

仅举几例。

我认为这也说明了为什么你通常不应该关心你不必保持作品的课程的实施细节。只要该类遵循其javadoc中规定的合同,您应该不知道它是如何工作的,因为实现细节将来可能会发生变化。