Какова стратегия выхода для Executors.newSingleThreadExecutor () - PullRequest
2 голосов
/ 09 сентября 2011

Я новичок в параллельности java, так что на этот вопрос уже можно было ответить много раз или слишком очевидно, что я, возможно, что-то упустил.

Я выполняю такую ​​задачу как:

Executors.newSingleThreadExecutor (). Execute (task)

Мой вопрос: когда заканчивается выполнение метода run задачи, почему он не завершается или почему поток все еще жив?Насколько я понимаю, когда поток выполнения () завершает поток больше не существует и перестает существовать, верно?

Ответы [ 2 ]

5 голосов
/ 09 сентября 2011

newSingleThreadExecutor возвращает ExecutorService, который использует один поток - он все еще может выполнять несколько задач . Он не выходит, потому что вы можете поставить больше задач.

Вы можете использовать:

ExecutorService service = Executors.newSingleThreadExecutor();
service.execute(task);
service.shutdown();

чтобы отключить его после выполнения задачи.

3 голосов
/ 09 сентября 2011

поток остается активным, поскольку его жизненный цикл не привязан к задачам, назначенным исполнителю;взгляните на:

javadoc для Executors.newSingleThreadExecutor

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

...