我有用户列表,我通过汇总每个用户的值来将每个用户与每个其他用户进行比较。这很好用,但是当我尝试并行化时,我得到了多个竞争条件,因为变量 totalVar 被多个线程同时访问。
我可以就如何并行添加每个列表的值有一些指示吗?
import scala.collection.JavaConversions._
import collection.JavaConverters._
object Question {
case class User(id: String, value : BigInt)
var userList : java.util.List[User] = new java.util.ArrayList[User]
def main(args: Array[String]) {
userList.add(new User("1" , 1))
userList.add(new User("2" , 1))
userList.add(new User("3" , 1))
userList.add(new User("4" , 1))
//Compare each user to every other user by totaling their
//values
var totalValue : BigInt = 0
for(u <- userList.par){
for(u1 <- userList.par){
totalValue = totalValue + u1.value
println("Adding "+u1.id+","+u1.value+ ","+totalValue)
}
println("Total is "+totalValue)
totalValue = 0
}
}
}
更新 :
我知道这似乎是一个毫无意义的例子,但我面临一个更复杂的问题,在这里我试图问一个最简单的问题,它将引导我朝着我试图解决的实际问题的方向前进。