如何在java中停止执行Executor ThreadPool?

Raj*_*ian 24 concurrent-programming

我正在使用java中的Executors来同时运行更多线程.我有一组Runnable对象,我将它分配给Exceutors.执行程序工作正常,一切都很好.但是在池中执行所有任务后,java程序没有终止,我认为Executor需要一些杀死线程的时间.请任何人帮助我减少执行者执行所有任务后所花费的时间.

Out*_*mer 25

ExecutorService中的类有只为这2种方法:关机()shutdownNow时() .

使用shutdown()方法后,可以调用awaitTermination()来阻止,直到所有已启动的任务都完成.您甚至可以提供超时以防止永远等待.

您可能想要点击我提供的其中一些链接.他们直接进入文档,您可以自己阅读这些内容.


Jag*_*ish 11

带有awaitTermination(timeout)的executor.shutdown()不会杀死线程.(即),如果您的可运行任务在轮询循环内,它不会终止任务.它只是在达到超时时中断其可运行的任务.因此,在您的runnable类的代码中,如果您在某些条件下等待,您可能希望将条件更改为,

while (flagcondition && !Thread.currentThread().isInterrupted()) {}
Run Code Online (Sandbox Code Playgroud)

这可确保在while循环终止时线程中断时任务停止.或者,您可能希望捕获中断的异常并在catch块中设置flag = false以终止线程.

try {
    // do some stuff and perform a wait that might throw an InterruptedException
} catch (InterruptedException e) {
    flagcondition = false;
}
Run Code Online (Sandbox Code Playgroud)

您可能还想使用分析器来检查某些线程未完成的原因.