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)
您可能还想使用分析器来检查某些线程未完成的原因.
| 归档时间: |
|
| 查看次数: |
34339 次 |
| 最近记录: |