这是代码片段:
object Test {
def main(args: Array[String]): Unit = {
// MARK: parallelization
val pool = Executors.newFixedThreadPool(3)
implicit val xc = ExecutionContext.fromExecutorService(pool)
var taskQueue = new ArrayBuffer[Future[Unit]]()
for (i <- 0 until 10) {
try {
taskQueue += Future {
print(s"in_${i}\n")
Thread.sleep(1000)
}
} catch {
case t: Throwable => {
print(t)
}
}
}
val importTasks = Future.sequence(taskQueue)
importTasks.onSuccess { case res => print("finishOnSuccess") }
Await.result(importTasks, Duration.Inf)
}
}
在执行所有作业并输出以下输出后,它将永远挂起:
in_1 在_2 在_0 在_4 在_3 在_5 在_8 在_6 在_7 在_9 成功完成
我尝试在 main
方法末尾调用 System.exit(0)
但仍然没有用。有什么建议么?谢谢!
最佳答案
您需要在Await<之后通过
。由于 pool.shutdown()
关闭pool
的ExecutorService
/newFixedThreadPool
正在通过 defaultThreadFactory 创建非守护线程 。
这篇文章详细解释了守护进程线程和非守护进程线程:
关于java - 当应用 Future 和 ThreadPools 进行多线程时,Scala Process 永远不会结束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45009759/