isShutdown和isTerminated有什么不同?

isShutdown和isTerminated测试效果示例代码

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;

public class Test{
    //由于只是为了测试下效果,所以随便搞个线程池来搭配,生产建议手动创建线程池
    static ExecutorService executorService = Executors.newCachedThreadPool();

    static class Task implements Runnable {
        @Override
        public void run() {
            try {
                TimeUnit.SECONDS.sleep(1);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println(Thread.currentThread().getName() + "运行任务");
        }
    }

    public static void main(String[] args) throws Exception {
        for (int i = 0; i < 100; i++) {
            executorService.execute(new Task());
        }
        System.out.println("准备用shutdown方法关闭线程池");
        executorService.shutdown();
        TimeUnit.SECONDS.sleep(1);
        System.out.println("线程池调用了shutdown方法,isShutdown=" + executorService.isShutdown());
        System.out.println("任务还在执行中,isTerminated=" + executorService.isTerminated());
        TimeUnit.SECONDS.sleep(3);
        System.out.println("3秒后,任务都执行结束了,isTerminated=" + executorService.isTerminated());
    }
}

运行结果:

  • 可以看到调用了shutdown方法后,isShutdown方法返回的是true,但是之后还是有任务在执行的,而isTerminated方法返回的是false。
    在这里插入图片描述
  • 而在等待了3秒后,任务都执行完毕了,isTerminated方法返回的就是true了
    在这里插入图片描述

总结

线程池调用了shutdown方法后,isShutdown方法返回的就是true,但是只要还有任务在执行,isTerminated方法返回的就是false,等到所有任务都执行完毕,isTerminated就会返回true了。

原创文章 358 获赞 387 访问量 7万+

猜你喜欢

转载自blog.csdn.net/weixin_38106322/article/details/105761973
今日推荐