当Java中存在ConcurrentHashMap时,为什么我们需要Scala的ParHashMap

时间:2017-01-09 22:58:09

标签: java scala data-structures trie concurrenthashmap

我考虑了两个具有相似概念的集合 - 来自Scala的ParHashMap和来自Java的ConcurrentHashMap。它们都具有相同的时间复杂度,并且它们都是线程安全且无锁的,但它们仅基于引擎盖下的不同概念 - 相应的trie和哈希表。这个推理引出了一个问题:为什么我们需要来自Scala的ParHashMap,而Java中有ConcurrentHashMap?

1 个答案:

答案 0 :(得分:4)

ConcurrentHashMap是一个线程安全的Map<>实现。如果您有多个线程同时访问它们,它们将同步。

ParHashMap是一个并行集合。如果您在此处执行操作(例如map()filter()aggregate()),Scala将为您并行化处理(类似于Spark,但仅限于单个JVM)。

总而言之,ConcurrentHashMap给出了原语来同步线程以实现并发,ParHashMap负责同步和执行。

修改:请注意ParHashMap本身不一定是线程安全的。我们的想法是从单个线程调用它的方法,让并行性由并行数据结构本身处理。