以下是代码段:
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 IN_2 in_0 in_4 in_3 in_5 in_8 in_6 in_7 in_9 finishOnSuccess
我尝试在System.exit(0)
方法结束时调用main
但仍无用。有什么建议?谢谢!
答案 0 :(得分:2)
ExecutorService
之后pool
pool.shutdown()
Await
newFixedThreadPool
{}}由于{{1}}正在defaultThreadFactory创建非守护程序线程。
并且本帖详细解释了守护程序主题和非守护程序主题: