任何并发专家都可以在ConcurrentHashMap中解释,哪些并发功能与以前的JDK相比有所改进
答案 0 :(得分:16)
嗯,ConcurrentHashMap
已被完全重写。在Java 8之前,每个ConcurrentHashMap
都有一个“并发级别”,它在构造时被修复。出于兼容性原因,仍然存在constructor accepting such a level但不以原始方式使用它。映射被分成多个段,因为它的并发级别,每个都有自己的锁,所以从理论上讲,如果它们都发生在不同的目标上,那么可能会有并发级并发更新细分,取决于散列。
在Java 8中,每个哈希桶都可以单独更新,因此只要没有哈希冲突,就可以有与其当前容量一样多的并发更新。这与保证原子更新的compute
方法等新功能一致,因此至少锁定了更新的哈希桶。在最好的情况下,他们确实只锁定那个桶。
此外,ConcurrentHashMap
受益于适用于所有类型哈希映射的常规哈希改进。当存在特定存储桶的哈希冲突时,实现将采用类似于该存储桶内的结构的排序映射,因此在搜索时会降低到O(log(n))
复杂度,而不是旧实现的O(n)
复杂度。桶。
答案 1 :(得分:-1)
我认为与JDK7相比有几处变化: