我是java并发的新手,所以这可能是一个已经回答很久或者太明显的问题,我可能会遗漏一些东西。
我正在按照这样的任务运行:
Executors.newSingleThreadExecutor()。执行(任务)
我的问题是,当它结束执行任务的run方法时为什么它不会退出或为什么线程仍然存在?我的理解是,一旦线程run()完成线程就不再存在了,对吧?
答案 0 :(得分:5)
newSingleThreadExecutor
返回使用单个线程的ExecutorService
- 它仍然可以执行多个任务。它不会退出,因为您可能想要提供更多任务。
您可以使用:
ExecutorService service = Executors.newSingleThreadExecutor();
service.execute(task);
service.shutdown();
在任务执行后将其关闭。
答案 1 :(得分:3)
线程保持活动状态,因为它的生命周期与分配给执行程序的任务的生命周期无关;看看:
javadoc for Executors.newSingleThreadExecutor
你会在内部发现,返回的ExecutorService使用一个线程来顺序运行你分配给它的任务,如果你的一个任务杀死了原来的任务,可能会实例化一个新线程。