我有下面的代码,其中executor是类型ExecutorService:
Runnable worker = new MyRunnable(x, y, p);
executor.execute(worker);
当一个数字打印p次时,我想要干净地终止所有线程的执行而不等待其他线程完成他们的工作。 我怎么能这样做?
答案 0 :(得分:3)
你无法干净地终止线程,就像在MS DOS时代你无法彻底终止程序一样。原因是在线程级别没有等效的进程间隔离,它们共享相同的地址空间和其他资源。
你唯一的选择是明确地实现一个基于线程中断的协作协议,这将使线程退出他们自己在他们自己上做的事情并结束。
答案 1 :(得分:1)
请尝试executor.shutdownNow()
。但是,如ExecutorService Javadoc所述,
除了尽力尝试停止处理主动执行任务之外,没有任何保证。例如,典型的实现将通过Thread.interrupt()取消,因此任何无法响应中断的任务都可能永远不会终止。
http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/ExecutorService.html#shutdownNow%28%29