写点什么

每日知识总结

用户头像
country
关注
发布于: 2021 年 01 月 29 日

一.ExecutorService 的关闭

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


1.方法简介:


shutdownNow 方法:该方法尝试停止所有正在执行的任务, 停止对正在等待执行的任务的处理, 并且返回正在等待执行的任务.同 shutdown(), 该方法也是立刻返回的, 不会等到所有任务终止以后才返回.因为终止是通过 interrupt 实现的, 所以如果那个任务没有对 interrupt 做出正确响应, 那么该方法将无法终止该任务. 所以传进去的任务需要对 interrup 做出合适的响应


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


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


简单来说就是 

service.shutdown();

while(!service.awaitTermination(1,TimeUnit.SECONDS)){ //未关闭返回 false 关闭返回 true

    System.out.println("线程池没有关闭");

}


用户头像

country

关注

还未添加个人签名 2019.02.13 加入

还未添加个人简介

评论

发布
暂无评论
每日知识总结