Scala 为什么ListBuff.Far不起作用?

Scala 为什么ListBuff.Far不起作用?,scala,parallel-processing,Scala,Parallel Processing,在Scala计划中,我有: var steps : ListBuffer[Step] = new ListBuffer[Step] var newsteps : ListBuffer[Step] = new ListBuffer[Step] // why par is not working ? steps.foreach(step => newsteps ++= step.execute()) 这很有效步骤仅在内部状态下操作,所有数据都是不可变的。然而,当我添加par来并行化工作时:

在Scala计划中,我有:

var steps : ListBuffer[Step] = new ListBuffer[Step]
var newsteps : ListBuffer[Step] = new ListBuffer[Step]
// why par is not working ?
steps.foreach(step => newsteps ++= step.execute())
这很有效<代码>步骤仅在内部状态下操作,所有数据都是不可变的。然而,当我添加
par
来并行化工作时:

steps.par.foreach(step => newsteps ++= step.execute())

结果是不可预测的。我在这里遗漏了什么吗?

ListBuffer
不是线程安全的,您正在从多个线程中追加它(
newsteps++=
)(这是在并行收集中调用
foreach
时发生的情况)

此外,Scala不鼓励将副作用与并行操作相混合:

鉴于并行集合框架的并发执行语义,通常应避免对集合执行导致副作用的操作,以保持确定性。

scala的方法是什么?@ццццц只需使用
map
而不是
foreach
。然后调用
seq
使结果有序<代码> ValeNealStase=步骤.PAR.MAP({ ExcUTE())。SEQ < /代码>