import java.util.concurrent.Executors
import scala.concurrent._
import scala.util.{Failure, Success}
import scala.concurrent.duration.DurationInt
import scala.language.postfixOps
object Test extends App {
println("start")
implicit val ec: ExecutionContextExecutorService = ExecutionContext.fromExecutorService(Executors.newFixedThreadPool(10))
val future: Future[Unit] = Future {
println(s"future")
Thread.sleep(1000)
}
future.onComplete({
case Success(x) => println("Success")
case Failure(x) => println("Failure")
})
Await.result(future, 10 seconds)
println("finish")
}
,输出是:
start
future
finish
Success
......但程序永远不会结束
这种情况正在发生,因为我正在使用其他执行上下文实现,当我使用scala.concurrent.ExecutionContext.Implicits.global
时,一切都很好。
我错过了什么?
答案 0 :(得分:1)
程序未关闭的原因是ExecutionContext
初始化的方式:
ExecutionContext.fromExecutorService(Executors.newFixedThreadPool(10))
这将通过defaultThreadFactory创建一个包含10个线程的池,它创建非守护程序线程:
未终止的非守护程序线程将阻止JVM退出。您需要提供创建守护线程的ThreadFactory
,或者在您创建shutdown
的{{1}}上手动调用Executor
。