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

最佳答案

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

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

总而言之,ConcurrentHashMap提供了用于并发同步线程的原语,ParHashMap负责同步和执行。

编辑:请注意,ParHashMap本身不一定是线程安全的。这个想法是从单个线程调用其方法,并由并行数据结构本身来处理并行性。

10-04 19:17