ConcurrentHashMap,JDK8中的并发功能得到了改进

时间:2015-07-23 02:17:15

标签: concurrency java-8 concurrenthashmap

任何并发专家都可以在ConcurrentHashMap中解释,哪些并发功能与以前的JDK相比有所改进

2 个答案:

答案 0 :(得分:16)

嗯,ConcurrentHashMap已被完全重写。在Java 8之前,每个ConcurrentHashMap都有一个“并发级别”,它在构造时被修复。出于兼容性原因,仍然存在constructor accepting such a level但不以原始方式使用它。映射被分成多个段,因为它的并发级别,每个都有自己的锁,所以从理论上讲,如果它们都发生在不同的目标上,那么可能会有并发级并发更新细分,取决于散列。

在Java 8中,每个哈希桶都可以单独更新,因此只要没有哈希冲突,就可以有与其当前容量一样多的并发更新。这与保证原子更新的compute方法等新功能一致,因此至少锁定了更新的哈希桶。在最好的情况下,他们确实只锁定那个桶。

此外,ConcurrentHashMap受益于适用于所有类型哈希映射的常规哈希改进。当存在特定存储桶的哈希冲突时,实现将采用类似于该存储桶内的结构的排序映射,因此在搜索时会降低到O(log(n))复杂度,而不是旧实现的O(n)复杂度。桶。

答案 1 :(得分:-1)

我认为与JDK7相比有几处变化:

  • 延迟初始化:在JDK8中,仅当某个实体添加到地图时,才会分配用于每个段的内存。在JDK7中,这是在创建地图时完成的。
  • 在JDK8中添加了一些新功能,例如forEach,reduce,search等。
  • 内部结构变化:在jdk8中使用TreeBin(红黑树)来提高搜索效率。