博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ExecutorService——shutdown方法和awaitTermination方法
阅读量:5949 次
发布时间:2019-06-19

本文共 1814 字,大约阅读时间需要 6 分钟。

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{    @Override    public 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{    @Override    public 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("线程池已经关闭");    }}

输出结果为:

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

 

转载地址:http://hwsxx.baihongyu.com/

你可能感兴趣的文章
MYSQL_使用外键约束(constraint)或触发器(trigger)来进行级联更新、删除
查看>>
Maven构建web项目在Eclipse中部署的几种方法
查看>>
[多文件上传三]利用UrlEncodedFormEntity表单实现
查看>>
左边邮件类型
查看>>
怎么能确保分类中的方法不和原始类的方法冲突?
查看>>
Python-pip, RubyGems, node-npm使用国内镜像加速下载
查看>>
C 语言静态变量的作用域和生存周期(ZZ)
查看>>
C++是可以在类里面定义和类名相同的变量的
查看>>
Linux socket 编程中 write 函数使用的注意事项
查看>>
eclipse开发环境
查看>>
如何计算硬盘、RAID组与Ceph的IOPS!!!
查看>>
18至今,学习Linux让我快速成长的三件事
查看>>
keepalived+nginx搭建高可用几个注意点
查看>>
pyinstaller 打包后运行错误
查看>>
一步一步学Ruby(十六):符号
查看>>
Spring Session + redis实现session共享
查看>>
阿里云的maven仓库
查看>>
hash table碰撞处理
查看>>
Oracle事务
查看>>
Spark2.0操作ES
查看>>