我想使用并行数组来完成任务,在开始编码之前,我有兴趣知道这个小片段是否是线程安全的:
import collection.mutable._
var listBuffer = ListBuffer[String]("one","two","three","four","five","six","seven","eight","nine")
var jSyncList = java.util.Collections.synchronizedList(new java.util.ArrayList[String]())
listBuffer.par.foreach { e =>
println("processed :"+e)
// using sleep here to simulate a random delay
Thread.sleep((scala.math.random * 1000).toLong)
jSyncList.add(e)
}
jSyncList.toArray.foreach(println)
是否有更好的方法来处理并行集合的某些内容,并在其他地方累积结果?
您发布的代码是完全安全的;我不确定premise但是:为什么需要将并行集合的结果累积到非并行集合中?并行集合的要点之一是它们看起来像其他集合。
我认为并行集合也将提供seq
方法切换到顺序的。所以你应该使用这个!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)