Java ServiceExecutor终止条件

Java ServiceExecutor终止条件,java,multithreading,executorservice,java.util.concurrent,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 Executor=Executors.newFixedThreadPool(池大小); 对于(inti=0;i

我不熟悉java执行器的东西

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

Executor executor = Executors.newFixedThreadPool(poolSize);

for(int i=0; i< 5;i++) executor.execute(new MyRunnable(i));
Executor Executor=Executors.newFixedThreadPool(池大小);
对于(inti=0;i<5;i++)executor.execute(newmyrunnable(i));
一旦线程找不到数据,它们就会正常终止

我的问题是,当所有线程终止时,执行器会发生什么情况,它是否仍在运行其主线程?或者它将自动终止,整个应用程序将优雅地完成


如果executor线程仍在运行,我如何让它在所有子线程完成后终止(poolSize线程数)。

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


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

使用shutdown方法从interface ExecuterService正常关闭,正如Quoi建议的那样,即使线程已完成,它仍会运行。你可以在这之后的任何时候使用submit进行新的工作。其他实用方法有

您可以这样想:

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

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

1)固定线程池执行器中的线程在启动后不会终止


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

ok。是否要在所有工作线程完成处理后停止池?executor.shutdown(),否则您的应用程序将永远不会同意。这意味着我需要将executor对象传递给MyRunnable,然后从那里关闭。希望这应该是一个正确的地方。有没有终止程序的条件?我有终止的案例,也有不终止的案例。谢谢你。无论如何,我可以从MyRunnable线程类发送一些信号,说让shutdownNow()执行器服务吗?