我考虑了两个具有类似概念的集合-Scala中的ParHashMap
和Java中的ConcurrentHashMap。它们都具有相同的时间复杂度,并且都是线程安全且无锁的,但是它们仅基于不同的概念-特里和哈希表。这种推理引发了一个问题:为什么Java中有ConcurrentHashMap时,我们为什么需要Scala中的ParHashMap?
最佳答案
ConcurrentHashMap
是线程安全的Map<>
实现。如果您有多个线程同时访问它,则它们将同步。ParHashMap
是并行集合。如果您在此处执行操作(例如map()
,filter()
,aggregate()
),Scala将为您并行化它(类似于Spark,但仅在单个JVM中)。
总而言之,ConcurrentHashMap
提供了用于并发同步线程的原语,ParHashMap
负责同步和执行。
编辑:请注意,ParHashMap
本身不一定是线程安全的。这个想法是从单个线程调用其方法,并由并行数据结构本身来处理并行性。