Scala并行集合在某些方面是否比Java中已有的并行集合更好?

我最近一直在学习Java中各种并发库,例如ConcurrentHashMapCliff Click中可爱的非阻塞库。

我对Scala了解不多,但我听说过最近的并行馆藏库的好东西。

我想知道这个库与基于Java的库相比会带来哪些主要优势?


答案 1

这两个集合用于不同的用途。

Java的并发集合允许您从并行上下文中使用它们:许多线程可以同时访问它们,并且集合肯定会执行正确的操作(因此调用方不必担心锁等)。

相比之下,Scala的并行集合旨在对自己运行高阶操作,而不必担心创建线程。所以你可以写这样的东西:

myData.par.filter(_.expensiveTest()).map(_.expensiveComputation())

并且过滤器和地图将各自并行执行(但过滤器将在地图开始之前完成)。


答案 2

稍微扩展一下Rex的答案:Java风格的并发可修改集合在Scala中不是很有趣的原因是它对可模拟数据的偏见:在Scala中实现并发的最常见方法是actor模型(它依赖于不可变的数据),而不是线程。