在ExecutionContext和/或Java线程池中,是否会替换死线程?

5

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

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


4
https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/Executors.html#newFixedThreadPool-int- - Sotirios Delimanolis
2
如果在关闭之前,任何线程由于执行期间的故障而终止,则如果需要执行后续任务,将会有一个新线程来代替它。 - Yuval Itzchakov
1个回答

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

"如果任何线程在关闭之前由于执行过程中发生故障而终止,则如果需要执行后续任务,将有一个新线程取代它。"


这个新线程会从头开始执行任务还是继续之前停止的地方? - Don Jose
新线程将重新执行任务。如果您想从先前死亡线程留下的位置继续,则必须自己在代码中放置这样的逻辑。 - domino_katrino

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接