Java ServiceExecutor终止条件

时间:2013-03-02 07:20:45

标签: java multithreading executorservice java.util.concurrent

我是java执行者的新手。

我正在使用Java的ExecutorService来启动多个线程来处理数据。

Executor executor = Executors.newFixedThreadPool(poolSize);

for(int i=0; i< 5;i++) executor.execute(new MyRunnable(i));

一旦线程找不到数据,它们就会优雅地终止。

我的问题是,当所有线程终止时,Executor会发生什么,它是否仍在运行其主线程?或者它将自行终止,整个申请将优雅地完成?

如果执行程序线程仍然运行,我怎么能让它在完成所有子线程后终止(poolSize线程数)。

4 个答案:

答案 0 :(得分:3)

1)固定线程池执行程序中的线程一旦启动就永远不会终止

2)线程池执行器

中没有主线程

答案 1 :(得分:2)

Executor将继续在谎言线程池下运行。您仍然可以执行或提交新任务。建议关闭Executor服务调用ExecutorService.html#shutdown(),它会尝试停止所有正在执行的任务,停止等待任务的处理,并返回等待执行的任务列表。

您还可以使用ExecutorService.html#shutdownNow()来停止所有正在执行的任务,停止等待任务的处理,并返回等待执行的任务列表。当您需要立即关机时,它非常有用。

答案 2 :(得分:2)

你可以这样想:

shutdown()只会告诉执行程序服务它不能接受新任务,但已经提交的任务继续运行

shutdownNow()将执行相同操作并尝试通过中断相关线程来取消已提交的任务。请注意,如果您的任务忽略了中断,shutdownNow的行为方式与关闭完全相同。

答案 3 :(得分:1)

使用shutdown方法从接口ExecuterService正常关闭,因为Quoi建议即使线程完成也仍然运行。您可以在此之后的任何时间使用提交新工作。其他实用方法是here