博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
spring项目优雅关闭线程池
阅读量:2216 次
发布时间:2019-05-07

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

ThreadPoolExecutor 介绍

java中线程池的三个方法shutdown()shutdownNow()awaitTermination()

shutdown:

  • 拒绝新任务提交到线程池
  • 待执行与正在执行的任务继续执行

shutdownNow

  • 拒绝提交新任务到线程池
  • 取消队列中等待执行的任务
  • 尝试取消正在执行任务

awaitTermination(long timeOut, TimeUnit unit)

  • 阻塞线程等待所有待执行以及正在执行的任务执行完成
  • 或者等到超时
  • 或者线程被中断抛出中断异常
    然后返回true(shutdown请求后所有任务执行完毕)或false(已超时)

三者的异同:

  • shutdownshutdownNow之后都拒绝提交任务,awaitTermination可以继续提交任务。
  • awaitTermination()是阻塞的,返回结果是线程池是否已停止(true/false)shutdown/Now不阻塞。
  • shutdownNow 立即关闭
  • shutdown 优雅关闭

优雅停机

了解完以上这些概念,现在就是在spring中的什么时机进行这些方法的调用呢?

spring的容器在关闭的时候会发布一个关闭事件,所以我们可以监听spring容器关闭事件,在接收到事件的时候执行优雅关闭。

如果你使用的是spring的线程池也就是@Async注解那么你可以直接在配置中指定优雅关闭即可

executor.setWaitForTasksToCompleteOnShutdown(true);executor.setAwaitTerminationSeconds(60)

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

你可能感兴趣的文章
03. 交换机的Telnet远程登陆配置
查看>>
微信小程序-调用-腾讯视频-解决方案
查看>>
phpStudy安装yaf扩展
查看>>
密码 加密 加盐 常用操作记录
查看>>
TP 分页后,调用指定页。
查看>>
Oracle数据库中的(+)连接
查看>>
java-oracle中几十个实用的PL/SQL
查看>>
PLSQL常用方法汇总
查看>>
几个基本的 Sql Plus 命令 和 例子
查看>>
PLSQL单行函数和组函数详解
查看>>
Oracle PL/SQL语言初级教程之异常处理
查看>>
Oracle PL/SQL语言初级教程之游标
查看>>
Oracle PL/SQL语言初级教程之操作和控制语言
查看>>
Oracle PL/SQL语言初级教程之过程和函数
查看>>
Oracle PL/SQL语言初级教程之表和视图
查看>>
Oracle PL/SQL语言初级教程之完整性约束
查看>>
PL/SQL学习笔记
查看>>
如何分析SQL语句
查看>>
结构化查询语言(SQL)原理
查看>>
SQL教程之嵌套SELECT语句
查看>>