函数作用:
尝试停止所有正在执行的任务,暂停正在等待的任务的处理,并返回正在等待执行的任务的列表,这个方法不等待正在执行的任务终止。
注意:对于正在执行的任务:ThreadPoolExecutor的实现是,遍历正在执行的任务,对每个任务调用interruptIfStarted(),设置对应线程的中断标志位。
void interruptIfStarted() { Thread t; if (getState() >= 0 && (t = thread) != null && !t.isInterrupted()) { try { t.interrupt(); } catch (SecurityException ignore) { } } }
import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; public class Exec { public static void main(String[] args) { ExecutorService exec = Executors.newCachedThreadPool(); exec.submit(new Runnable() { @Override public void run() { for(;;){ System.out.println("Thread1!"); } } }); exec.submit(new Runnable() { @Override public void run() { for(;!Thread.interrupted();){ System.out.println("Thread2!"); } } }); exec.shutdownNow(); } }
输出结果:线程1无法停止,线程2可以停止!