shutdown
void shutdown()
启动一次顺序关闭,执行以前提交的任务,但不接受新任务。若已经关闭,则调用没有其他作用。
抛出:SecurityException - 如果安全管理器存在并且关闭,此 ExecutorService 可能操作某些不允许调用者修改的线程(因为它没有保持RuntimePermission("modifyThread")),或者安全管理器的 checkAccess 方法拒绝访问。

isTerminated
boolean isTerminated()
若关闭后所有任务都已完成,则返回true。注意除非首先调用shutdown或shutdownNow,否则isTerminated永不为true。返回:若关闭后所有任务都已完成,则返回true。

  1. public static void moreThread() {
  2. try {
  3. int threadNum = 0;
  4. for (int i = 0; i < 10; i++) {
  5. threadNum++;
  6. final int currentThreadNum = threadNum;
  7. exe.execute(new Runnable() {
  8. @Override
  9. public void run() {
  10. try {
  11. System.out.println("子线程[" + currentThreadNum + "]开启");
  12. Thread.sleep(1000*10);
  13. } catch (InterruptedException e) {
  14. e.printStackTrace();
  15. }finally{
  16. System.out.println("子线程[" + currentThreadNum + "]结束");
  17. }
  18. }
  19. });
  20. }
  21. System.out.println("已经开启所有的子线程");
  22. exe.shutdown();
  23. System.out.println("shutdown():启动一次顺序关闭,执行以前提交的任务,但不接受新任务。");
  24. while(true){
  25. if(exe.isTerminated()){
  26. System.out.println("所有的子线程都结束了!");
  27. break;
  28. }
  29. Thread.sleep(1000);
  30. }
  31. } catch (InterruptedException e) {
  32. e.printStackTrace();
  33. }finally{
  34. System.out.println("主线程结束");
  35. }
  36. }
  1. 子线程[1]开启
  2. 子线程[6]开启
  3. 子线程[2]开启
  4. 子线程[5]开启
  5. 子线程[9]开启
  6. 已经开启所有的子线程
  7. 子线程[3]开启
  8. 子线程[7]开启
  9. 子线程[10]开启
  10. shutdown():启动一次顺序关闭,执行以前提交的任务,但不接受新任务。
  11. 子线程[4]开启
  12. 子线程[8]开启
  13. 子线程[6]结束
  14. 子线程[3]结束
  15. 子线程[7]结束
  16. 子线程[2]结束
  17. 子线程[1]结束
  18. 子线程[5]结束
  19. 子线程[9]结束
  20. 子线程[4]结束
  21. 子线程[10]结束
  22. 子线程[8]结束
  23. 所有的子线程都结束了!
  24. 主线程结束

原贴地址:http://blog.csdn.net/lisheng19870305/article/details/44747741

Java线程池关闭1-shutdown和isTerminated<转>的更多相关文章

  1. 【java线程池】

    一.概述 1.线程池的优点 ①降低系统资源消耗,通过重用已存在的线程,降低线程创建和销毁造成的消耗: ②提高系统响应速度,当有任务到达时,无需等待新线程的创建便能立即执行: ③方便线程并发数的管控,线 ...

  2. Java线程池原理及分析

    线程池是很常用的并发框架,几乎所有需要异步和并发处理任务的程序都可用到线程池. 使用线程池的好处如下: 降低资源消耗:可重复利用已创建的线程池,降低创建和销毁带来的消耗: 提高响应速度:任务到达时,可 ...

  3. 如何优雅的关闭Java线程池

    面试中经常会问到,创建一个线程池需要哪些参数啊,线程池的工作原理啊,却很少会问到线程池如何安全关闭的. 也正是因为大家不是很关注这块,即便是工作三四年的人,也会有因为线程池关闭不合理,导致应用无法正常 ...

  4. JAVA线程池shutdown和shutdownNow的区别

    一.区别介绍 shutDown()  当线程池调用该方法时,线程池的状态则立刻变成SHUTDOWN状态.此时,则不能再往线程池中添加任何任务,否则将会抛出RejectedExecutionExcept ...

  5. java线程池的使用与详解

    java线程池的使用与详解 [转载]本文转载自两篇博文:  1.Java并发编程:线程池的使用:http://www.cnblogs.com/dolphin0520/p/3932921.html   ...

  6. Java线程池使用和分析(一)

    线程池是可以控制线程创建.释放,并通过某种策略尝试复用线程去执行任务的一种管理框架,从而实现线程资源与任务之间的一种平衡. 以下分析基于 JDK1.7 以下是本文的目录大纲: 一.线程池架构 二.Th ...

  7. Java线程池使用和常用参数

    多线程问题: 1.java中为什么要使用多线程使用多线程,可以把一些大任务分解成多个小任务来执行,多个小任务之间互不影像,同时进行,这样,充分利用了cpu资源. 2.java中简单的实现多线程的方式 ...

  8. 并发编程(十一)—— Java 线程池 实现原理与源码深度解析(一)

    史上最清晰的线程池源码分析 鼎鼎大名的线程池.不需要多说!!!!! 这篇博客深入分析 Java 中线程池的实现. 总览 下图是 java 线程池几个相关类的继承结构:    先简单说说这个继承结构,E ...

  9. Java线程池ThreadPoolExecutor使用和分析(一)

    相关文章目录: Java线程池ThreadPoolExecutor使用和分析(一) Java线程池ThreadPoolExecutor使用和分析(二) - execute()原理 Java线程池Thr ...

随机推荐

  1. Java 8 – How to format LocalDateTime

    Few examples to show you how to format java.time.LocalDateTime in Java 8. 1. LocalDateTime + DateTim ...

  2. JavaScript监听手机物理返回键的两种解决方法

    JavaScript没有监听物理返回键的API,所以只能使用 popstate 事件监听. 有两个解决办法: 1.返回到指定的页面 pushHistory(); window.addEventList ...

  3. 脚本采集数据插入到influxdb数据库里

    #!/bin/bash # 定时收集java服务metrics # curl http://10.7.16.42:6301/metrics demo # 参数: post_influxdb_write ...

  4. centos 7部署graphite(nginx+uwsgi)

    http://www.debugrun.com/a/o5qyP9W.htmlhttp://blog.csdn.net/tsingfu1986/article/details/44239503 http ...

  5. XMPP 安装ejabberd 搭建服务器环境

    网上各种找..各种安装失败.. 终于.... ejabberd 下载列表.... http://www.process-one.net/en/ejabberd/archive/  建议下载old 版本 ...

  6. 菜鸟学Java(八)——dom4j详解之读取XML文件

    dom4j是一个Java的XML API,类似于jdom,用来读写XML文件的.dom4j是一个非常非常优秀的Java XML API,具有性能优异.功能强大和极端易用使用的特点,同时它也是一个开放源 ...

  7. Vue.js使用-组件(下篇)

    上一节,我们定义了组件的基本使用,下面我们看看组件其他的一些特性. 1.组件作用域 同时在Vue对象和组件中定义一个属性,显示结果是怎样的呢? <!DOCTYPE html> <ht ...

  8. 如何打开chrome中flash debug player

    If you’ve installed the latest version of Google Chrome, and you are having a problem debugging your ...

  9. #define SIG_DFL ((void(*)(int))0)

    在linux内的信号处理函数中,有#define SIG_DFL ((void(*)(int))0)和#define SIG_IGN ((void(*)(int))1)两个宏定义.要理解这两个宏定义, ...

  10. django中将model转换为dict的方法

    django中将model转换为dict的方法 from django.forms.models import model_to_dict from user.model import userpro ...