为什么以下代码会产生死锁:
object Test extends Application
{
def printProgress(i:Int) =
{
println("Processed " + i)
}
println("A")
(1 to 1000).par.foreach{ i =>
printProgress(i)
}
println("B")
}
(即A
已打印,但B
或Processed ...
行均未打印。)
但是,以下代码不会导致死锁:
object Test extends Application
{
println("A")
(1 to 1000).par.foreach{ i =>
println("Processed " + i)
}
println("B")
}
(即一切都被打印出来。)
我正在运行Scala版本2.9.1.final。
答案 0 :(得分:13)
可能是因为你扩展了应用程序,而我无法分辨你的两个例子之间的区别。
使用Application,代码在类初始化中在方法main
之外执行。此时JVM受到严重限制,特别是与多线程相关。不推荐应用程序支持App,它具有一些魔法(trait DelayedInit),导致代码在main
中执行。所以object Test extends App
应该修复它。