Ket*_*tan 3 java terminate executorservice
我正在使用Executor框架使用线程池启动多个线程,即newFixedThreadPool.我使用threadpool.submit(aThread)来提交要由线程池执行的作业,这很好但是我需要确定所有线程何时完成,以便我可以继续进行其他处理.我看着使用Future.get()阻塞,直到线程完成,这里的问题是它阻塞直到结果可用.我还看了继续调用isTerminated()方法然后在发出关闭后调用睡眠以检查所有线程是否完整但这对我来说似乎并不整齐.还有另一种清洁方式吗?此外,如果在任何一个线程中引发异常,我希望能够终止所有其他正在运行的线程,并且还要阻止池中任何排队的线程启动.这样做的最佳机制是什么?
期待听到您的回复
TIA
使用ExecutorService#shutdown()然后使用ExecutorService #awaitTermination()
例如:
ExecutorService service = Executors.newCachedThreadPool();
service.submit(...);
service.submit(...);
service.shutdown();
service.awaitTermination(Long.MAX_VALUE, TimeUnit.DAYS);
// All tasks have now finished
Run Code Online (Sandbox Code Playgroud)
至于在任务因异常而失败时通知您.您必须向ExecutorService 提供一个ThreadFactory,它为它创建的每个线程设置一个"未捕获的异常处理程序".然后,此异常处理程序可以终止正在运行的任务.