【问题标题】:Execution Context not getting shutdown执行上下文未关闭
【发布时间】:2020-07-18 03:45:08
【问题描述】:

我遇到了一个奇怪的问题,执行上下文没有被关闭。我尝试了有或没有等待。


  import scala.concurrent.ExecutionContext

  val customExecutor: ExecutorService =
    Executors.newFixedThreadPool(serviceConfig.serviceConf.numberOfThreads)
  implicit val customExecutionContext: ExecutionContext =
    ExecutionContext.fromExecutorService(
      Executors.newFixedThreadPool(10)
    )

    futureCall() map { result =>
      import java.util.concurrent.TimeUnit

      customExecutor.shutdown()

      customExecutor.awaitTermination(60, TimeUnit.SECONDS)  
    } 


【问题讨论】:

    标签: scala scala-collections


    【解决方案1】:

    您正在等待线程内的关闭,但执行器在线程运行时无法关闭,因此不会发生。所以将awaitTermination移到map函数之外。

    但真正的问题是您创建了两个ExecutorServices 并停止了错误的一个。如果您只是传递您创建的服务,它会按预期终止:

    val customExecutor: ExecutorService =
      Executors.newFixedThreadPool(10)
    
    implicit val customExecutionContext: ExecutionContext =
      ExecutionContext.fromExecutorService(customExecutor)
    
    futureCall() map { result =>
      customExecutor.shutdown()
    } 
    
    customExecutor.awaitTermination(5, TimeUnit.SECONDS)
    

    【讨论】:

    • 我也试过这个:futureCall() map { result => } onComplete { _ => import java.util.concurrent.TimeUnit customExecutor.shutdown() customExecutor.awaitTermination(60, TimeUnit.SECONDS ) }
    • 我已经用我认为的实际问题更新了答案,让我知道它是否适合你。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-18
    • 1970-01-01
    相关资源
    最近更新 更多