ExecutorService——shutdown方法和awaitTermination方法
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方法相关推荐
- JS中的call()方法和apply()方法用法总结
1. 每个函数都包含两个非继承而来的方法:call()方法和apply()方法. 2. 相同点:这两个方法的作用是一样的. 都是在特定的作用域中调用函数,等于设置函数体内this对象的值,以扩充函数赖 ...
- python 推迟运行_一文看懂Python的time模块sleep()方法和strftime()方法
概述 今天主要介绍一下Python的time sleep()方法和strftime()方法. 一.Python time sleep()方法 Python time sleep() 函数推迟调用线程的 ...
- JS服务器端开发基础篇(Array.slice方法和splice方法)
Array.slice方法和splice方法在众多的JS数组中属于比较复杂的一个方法,而且容易记混.搜索网络上很多资料都没有发现系统的总结.特别归纳如下,不完全处还希望各位批评指正. 一.slice ...
- Loader的load方法和loadBytes方法LoaderContext参数
(1)在看代码的时候还发现一个以前没有这么注意的问题,也mark一下. 关于Loader的load方法和loadBytes方法LoaderContext参数的问题.. 要加载某个SWF到自己的安全域内 ...
- ThinkPHP 中M方法和D方法的具体区别
M方法和D方法的区别 ThinkPHP 中M方法和D方法都用于实例化一个模型类,M方法 用于高效实例化一个基础模型类,而 D方法 用于实例化一个用户定义模型类. 使用M方法 如果是如下情况,请考虑使用 ...
- asp.net TemplateField模板中的Bind方法和Eval方法
TemplateField模板中为了能够有限制的或者取出数据库中某列的值时,可以用Bind和Eval方法来实现.以下是Bind方法的格式,Eval的格式也是和Bind一样的. Bind("列 ...
- hashcode()方法和equals()方法
一.hashcode()方法和equals()方法的介绍 Java的基类Object提供了一些方法,其中equals()方法用于判断两个对象是否相等,hashCode()方法用于计算对象的哈希码.eq ...
- 并发基础篇(六):线程Thread类的start()方法和run()方法
点个赞,看一看,好习惯!本文 GitHub https://github.com/OUYANGSIHAI/JavaInterview 已收录,这是我花了 3 个月总结的一线大厂 Java 面试总结,本 ...
- 请简述一下线程的sleep()方法和yield()方法的区别?
请简述一下线程的sleep()方法和yield()方法的区别? ①sleep()方法给其他线程机会时不考虑线程的优先级,因此会给低优先级的线程以运行的机会. yield()方法只会给相同优先级或更高优 ...
最新文章
- SVN提示被锁定的解决方法(转)
- cocos2dx 字体外发光_Ps教程:只需4个图层!即可制作出超炫酷的荧光字体
- java windows wifi_[转] win7 电脑无线网变身WiFi热点
- 【机器学习PAI实践三】雾霾成因分析
- 目标检测迁移学习_使用迁移学习检测疟疾
- 漫画:图的 “多源” 最短路径
- URI、URL和URN的关系
- wait(3) - Linux man page
- Java 视频生成缩略图教程
- 毕设题目:Matlab车辆计数
- 【破解APP抓包限制】Xposed+JustTrustMe关闭SSL证书验证!
- 融合黄金正弦与sigmoid连续化的海鸥优化算法-附代码
- 暴雪不管的国服 链游要插手
- 1.4 极限的运算法则
- 攀藤PM2.5传感器使用定义串口usb数据接收
- win10 此电脑中【设备和驱动器】位置出现空白图标
- 初三计算机word 操作题,信息技术中考word操作题.doc
- 工作量证明 - 如何证明你的工作很卖力
- 数字电路学习——三极管的使用
- nginx中location介绍