Java ServiceExecutor终止条件

我是java执行器的新手。

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

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

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

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

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

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

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

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

2)线程池执行器中没有主线程

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

你可以这样想:

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

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