我是java执行者的新手。
我正在使用Java的ExecutorService来启动多个线程来处理数据。
Executor executor = Executors.newFixedThreadPool(poolSize);
for(int i=0; i< 5;i++) executor.execute(new MyRunnable(i));
一旦线程找不到数据,它们就会优雅地终止。
我的问题是,当所有线程终止时,Executor会发生什么,它是否仍在运行其主线程?或者它将自行终止,整个申请将优雅地完成?
如果执行程序线程仍然运行,我怎么能让它在完成所有子线程后终止(poolSize线程数)。
答案 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