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