ConcurrentHashMap,在JDK8中改进了并发功能
任何并发专家都可以在ConcurrentHashMap中进行解释,与以前的JDK相比,这些并发功能得到了改进
那么, ConcurrentHashMap
已被完全重写。 在Java 8之前,每个ConcurrentHashMap
都有一个在建造时固定的“并发级别”。 出于兼容性原因,仍然有一个构造函数接受这样的级别,尽管没有以原始方式使用它。 该映射被分割为多个段,因为它的并发级别每个都有自己的锁,所以理论上可能会有并发级并发更新,如果它们都发生针对不同的段,这取决于哈希。
在Java 8中,每个散列桶都可以单独更新,因此只要不存在散列冲突,就可以有多少并发更新作为其当前容量。 这符合保证原子更新的compute
方法等新功能,因此至少锁定了被更新的哈希桶。 在最好的情况下,他们确实只锁定那一个桶。
此外, ConcurrentHashMap
受益于应用于所有类型散列映射的一般散列改进。 当某个存储桶存在散列冲突时,实现将使用该存储桶内的结构类似结构的排序映射,从而在搜索时降级为O(log(n))
复杂性而不是旧实现的O(n)
复杂性水桶。
我认为与JDK7相比有几个变化:
上一篇: ConcurrentHashMap, which concurrent features improved in JDK8