Java ServiceExecutor终止条件
我不熟悉java执行器的东西 我正在使用Java的ExecutorService启动几个线程来处理数据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
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()执行器服务吗?