ExecutorService的关闭
shutdown和awaitTermination为接口ExecutorService定义的两个方法,一般情况配合使用来关闭线程池。

方法简介
shutdown方法:平滑的关闭ExecutorService,当此方法被调用时,ExecutorService停止接收新的任务并且等待已经提交的任务(包含提交正在执行和提交未执行)执行完成。当所有提交任务执行完毕,线程池即被关闭。

awaitTermination方法:接收人timeout和TimeUnit两个参数,用于设定超时时间及单位。当等待超过设定时间时,会监测ExecutorService是否已经关闭,若关闭则返回true,否则返回false。一般情况下会和shutdown方法组合使用。

具体实例
普通任务处理类:

package com.secbro.test.thread;import java.util.concurrent.Callable;/*** @author zhuzhisheng* @Description* @date on 2016/6/1.*/
public class Task implements Callable{@Overridepublic Object call() throws Exception {System.out.println("普通任务");return null;}
}

长时间任务处理类:

package com.secbro.test.thread;import java.util.concurrent.Callable;
import java.util.concurrent.TimeUnit;/*** @author zhuzhisheng* @Description* @date on 2016/6/1.*/
public class LongTask implements Callable{@Overridepublic Object call() throws Exception {System.out.println("长时间任务");TimeUnit.SECONDS.sleep(5);return null;}
}

测试类:

package com.secbro.test.thread;import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;/*** @author zhuzhisheng* @Description* @date on 2016/6/1.*/
public class TestShutDown {public static void main(String[] args) throws InterruptedException{ScheduledExecutorService service = Executors.newScheduledThreadPool(4);service.submit(new Task());service.submit(new Task());service.submit(new LongTask());service.submit(new Task());service.shutdown();while (!service.awaitTermination(1, TimeUnit.SECONDS)) {System.out.println("线程池没有关闭");}System.out.println("线程池已经关闭");}}

输出结果为:

普通任务
普通任务
长时间任务
普通任务
线程池没有关闭
线程池没有关闭
线程池没有关闭
线程池没有关闭
线程池已经关闭

ExecutorService——shutdown方法和awaitTermination方法相关推荐

  1. JS中的call()方法和apply()方法用法总结

    1. 每个函数都包含两个非继承而来的方法:call()方法和apply()方法. 2. 相同点:这两个方法的作用是一样的. 都是在特定的作用域中调用函数,等于设置函数体内this对象的值,以扩充函数赖 ...

  2. python 推迟运行_一文看懂Python的time模块sleep()方法和strftime()方法

    概述 今天主要介绍一下Python的time sleep()方法和strftime()方法. 一.Python time sleep()方法 Python time sleep() 函数推迟调用线程的 ...

  3. JS服务器端开发基础篇(Array.slice方法和splice方法)

    Array.slice方法和splice方法在众多的JS数组中属于比较复杂的一个方法,而且容易记混.搜索网络上很多资料都没有发现系统的总结.特别归纳如下,不完全处还希望各位批评指正.  一.slice ...

  4. Loader的load方法和loadBytes方法LoaderContext参数

    (1)在看代码的时候还发现一个以前没有这么注意的问题,也mark一下. 关于Loader的load方法和loadBytes方法LoaderContext参数的问题.. 要加载某个SWF到自己的安全域内 ...

  5. ThinkPHP 中M方法和D方法的具体区别

    M方法和D方法的区别 ThinkPHP 中M方法和D方法都用于实例化一个模型类,M方法 用于高效实例化一个基础模型类,而 D方法 用于实例化一个用户定义模型类. 使用M方法 如果是如下情况,请考虑使用 ...

  6. asp.net TemplateField模板中的Bind方法和Eval方法

    TemplateField模板中为了能够有限制的或者取出数据库中某列的值时,可以用Bind和Eval方法来实现.以下是Bind方法的格式,Eval的格式也是和Bind一样的. Bind("列 ...

  7. hashcode()方法和equals()方法

    一.hashcode()方法和equals()方法的介绍 Java的基类Object提供了一些方法,其中equals()方法用于判断两个对象是否相等,hashCode()方法用于计算对象的哈希码.eq ...

  8. 并发基础篇(六):线程Thread类的start()方法和run()方法

    点个赞,看一看,好习惯!本文 GitHub https://github.com/OUYANGSIHAI/JavaInterview 已收录,这是我花了 3 个月总结的一线大厂 Java 面试总结,本 ...

  9. 请简述一下线程的sleep()方法和yield()方法的区别?

    请简述一下线程的sleep()方法和yield()方法的区别? ①sleep()方法给其他线程机会时不考虑线程的优先级,因此会给低优先级的线程以运行的机会. yield()方法只会给相同优先级或更高优 ...

最新文章

  1. SVN提示被锁定的解决方法(转)
  2. cocos2dx 字体外发光_Ps教程:只需4个图层!即可制作出超炫酷的荧光字体
  3. java windows wifi_[转] win7 电脑无线网变身WiFi热点
  4. 【机器学习PAI实践三】雾霾成因分析
  5. 目标检测迁移学习_使用迁移学习检测疟疾
  6. 漫画:图的 “多源” 最短路径
  7. URI、URL和URN的关系
  8. wait(3) - Linux man page
  9. Java 视频生成缩略图教程
  10. 毕设题目:Matlab车辆计数
  11. 【破解APP抓包限制】Xposed+JustTrustMe关闭SSL证书验证!
  12. 融合黄金正弦与sigmoid连续化的海鸥优化算法-附代码
  13. 暴雪不管的国服 链游要插手
  14. 1.4 极限的运算法则
  15. 攀藤PM2.5传感器使用定义串口usb数据接收
  16. win10 此电脑中【设备和驱动器】位置出现空白图标
  17. 初三计算机word 操作题,信息技术中考word操作题.doc
  18. 工作量证明 - 如何证明你的工作很卖力
  19. 数字电路学习——三极管的使用
  20. nginx中location介绍

热门文章

  1. Spring boot 整合dynamic实现多数据源
  2. pymssql出现的错误
  3. Android 第二十一课 RecyclerView简单的应用之编写“精美”的聊天页面
  4. Laravel Passport里的授权类型介绍
  5. Nginx的Mainline version、Stable version、Legacy version的版本区别
  6. 有了防火墙、IPS、WAF 还需要数据库审计?
  7. C语言插入排序算法及代码
  8. Java 网络编程1
  9. Ubuntu使用VNC运行基于Docker的桌面系统
  10. 七招挽回受损WORD文档