我正在使用java中的Executors来同时运行更多线程。 我有一组Runnable对象,我将它分配给Exceutors。执行器工作正常 一切都很好。但是在池中执行完所有任务之后,java程序没有终止,我认为Executor需要一些时间来杀死线程。请任何人帮我减少执行程序执行后所花费的时间所有任务。
答案 0 :(得分:22)
ExecutorService类只有两种方法:shutdown()和shutdownNow()。
使用shutdown()方法后,可以调用awaitTermination()来阻止,直到所有已启动的任务完成。您甚至可以提供超时以防止永远等待。
您可能想点击我提供的其中一些链接。他们直接进入文档,您可以自己阅读这些内容。
答案 1 :(得分:10)
executor.shutdown()不会杀死线程。 (即),如果您的可运行任务在轮询循环内,它不会终止任务。它只是在达到超时时中断其可运行的任务。因此,在您的runnable类的代码中,如果您在某些条件下等待,您可能希望将条件更改为,
while (flagcondition && !Thread.currentThread().isInterrupted()) {}
这确保当while循环终止时线程被中断时任务停止。或者,您可能希望捕获中断的异常并进行设置 在catch块中使用flag = false来终止线程。
try {
// do some stuff and perform a wait that might throw an InterruptedException
} catch (InterruptedException e) {
flagcondition = false;
}
您可能还想使用分析器来检查某些线程未完成的原因。