shutdownNow

函数作用:

尝试停止所有正在执行的任务,暂停正在等待的任务的处理,并返回正在等待执行的任务的列表,这个方法不等待正在执行的任务终止。

注意:对于正在执行的任务: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可以停止!

原文地址:https://www.cnblogs.com/iuyy/p/13574052.html