Executors.newSingleThreadExecutor()的退出策略是什么

时间:2011-09-08 22:43:02

标签: java multithreading concurrency executorservice

我是java并发的新手,所以这可能是一个已经回答很久或者太明显的问题,我可能会遗漏一些东西。

我正在按照这样的任务运行:

Executors.newSingleThreadExecutor()。执行(任务)

我的问题是,当它结束执行任务的run方法时为什么它不会退出或为什么线程仍然存在?我的理解是,一旦线程run()完成线程就不再存在了,对吧?

2 个答案:

答案 0 :(得分:5)

newSingleThreadExecutor返回使用单个线程ExecutorService - 它仍然可以执行多个任务。它不会退出,因为您可能想要提供更多任务。

您可以使用:

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

在任务执行后将其关闭。

答案 1 :(得分:3)

线程保持活动状态,因为它的生命周期与分配给执行程序的任务的生命周期无关;看看:

javadoc for Executors.newSingleThreadExecutor

你会在内部发现,返回的ExecutorService使用一个线程来顺序运行你分配给它的任务,如果你的一个任务杀死了原来的任务,可能会实例化一个新线程。

相关问题