Заменены ли мертвые потоки в пуле потоков ExecutionContext и / или Java?
Когда поток умирает из-за исключения, что происходит с этим потоком? Если это внутри пула потоков, это порождает новый поток? Меня интересует, что происходит в scala ExecutionContext, но, поскольку ExecutionContext оборачивает пул потоков Java, я думаю, что пользователи Java также будут знать ответ.
Например, если я создаю ExecutionContext, обертывающий FixedThreadPool(100), если один поток умирает, заменяет ли он пул потоков?
1 ответ
Сам поток не может порождать новый поток после его смерти, однако пул потоков может его заменить. Например, пул потоков, созданный Executors.newFixedThreadPool()
заменяет мертвые нити, когда это необходимо. Из документации для Executors.newFixedThreadPool()
:
"Если какой-либо поток завершается из-за сбоя во время выполнения до завершения работы, новый будет занимать его место, если это необходимо для выполнения последующих задач".