2016-06-19 1 views
2

Когда поток умирает из-за исключения, что происходит с этим потоком? Если он находится внутри пула потоков, создает ли он новый поток? Меня интересует, что происходит в scala ExecutionContext, но поскольку ExecutionContext обертывает пул потоков java, я думаю, что пользователи Java также будут знать ответ.Заменяются ли мертвые потоки в потоке потоков ExecutionContext и/или Java?

Например, если я создаю ExecutionContext, который обертывает FixedThreadPool (100), если один поток умирает, он линит пул, заменяющий поток?

+4

https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/Executors.html#newFixedThreadPool-int- –

+2

* Если какой-либо поток завершается из-за ошибки во время выполнения предварительного к завершению работы, новый будет занят, если необходимо, для выполнения последующих задач. * –

ответ

5

Нить сама не может порождать новую нить после ее смерти, однако пул потоков может ее заменить. Например, пул потоков, созданный Executors.newFixedThreadPool(), заменяет мертвые потоки при необходимости. Из документации Executors.newFixedThreadPool():

«Если какой-либо поток завершается из-за сбой во время выполнения До остановки, новый займет свое место, если это необходимо для выполнения последующих задач »

+0

будет ли этот новый поток выполнять задачу с первого раза или продолжить, когда мертвый поток остановился? – masSdev

Смежные вопросы