Scala 当为将来使用执行上下文的其他实现时,程序永远不会结束

Scala 当为将来使用执行上下文的其他实现时,程序永远不会结束,scala,concurrency,threadpool,future,Scala,Concurrency,Threadpool,Future,输出为: 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

输出为:

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")

}
。。。但这个项目永远不会结束

这是因为我使用的是其他执行上下文实现,当我使用
scala.concurrent.ExecutionContext.Implicits.global时,一切都很好


我缺少什么?

程序之所以没有关闭,是因为
ExecutionContext
的初始化方式:

start
future
finish
Success
这将通过创建非守护进程线程的defaultThreadFactory创建10个线程池:


未终止的非守护进程线程将阻止JVM退出。您需要提供创建daemonthreads的
ThreadFactory
,或者在创建
ExecutionContext
Executor
上手动调用
shutdown

您愿意在执行上下文上手动调用
shutdown
吗?因为这应该行得通。谢谢,行得通!现在我的问题是:这是正确的方法吗
ExecutionContext.fromExecutorService(Executors.newFixedThreadPool(10))