【问题标题】:Are dead threads replaced in an ExecutionContext and/or Java thread pool?死线程是否在 ExecutionContext 和/或 Java 线程池中被替换?
【发布时间】:2016-10-20 22:37:57
【问题描述】:

当一个线程因为异常而死时,这个线程会发生什么?如果它在线程池中,它会产生一个新线程吗?我对 scala ExecutionContext 中发生的事情很感兴趣,但是由于 ExecutionContext 包装了一个 java 线程池,我认为 Java 用户也会知道答案。

例如,如果我创建一个包装 FixedThreadPool(100) 的 ExecutionContext,如果一个线程死亡,他的线程池是否会替换该线程?

【问题讨论】:

标签: java multithreading scala threadpool executioncontext


【解决方案1】:

线程本身在死后无法生成新线程,但是线程池可以替换它。例如,Executors.newFixedThreadPool() 创建的线程池在需要时替换死线程。来自Executors.newFixedThreadPool() 的文档:

"如果任何线程在执行之前由于失败而终止 关闭,如果需要执行,一个新的将取代它的位置 后续任务。”

【讨论】:

  • 这个新线程是先执行任务还是从死线程停止的地方继续执行?
猜你喜欢
  • 1970-01-01
  • 2016-09-26
  • 2021-05-09
  • 2010-09-10
  • 2011-02-09
  • 1970-01-01
  • 2011-11-16
  • 2011-11-23
相关资源
最近更新 更多