【发布时间】:2017-05-24 07:50:22
【问题描述】:
我考虑了两个具有相似概念的集合 - 来自 Scala 的 ParHashMap 和来自 Java 的 ConcurrentHashMap。它们都具有相同的时间复杂度,并且它们都是线程安全且无锁的,但它们只是基于不同的概念——相应的特里树和哈希表。这个推理导致了一个问题:为什么我们需要 Scala 的 ParHashMap 而 Java 有 ConcurrentHashMap?
【问题讨论】:
-
ConcurrentHashMap 不是无锁的
-
@talex 我认为它曾经是非无锁的,但在 Java 8 中发生了变化。
-
@Louis Wasserman
ConcurrenHashMap一直是lock-free,但在 Java 7 中,它通过利用Lock stripping并发模式与 Node 有另一种结构,但在 Java 8 中它发生了变化 - 这种方法被禁用,rb tree以防发生碰撞。 -
它提供了无锁查询、某些无锁更新操作和不同key的并发更新。但是当对同一个键执行原子更新时,同步是不可避免的。
标签: java scala data-structures trie concurrenthashmap