当前位置: 首页 > news >正文

如何优雅的关闭线程池

要确保线程池能够优雅退出,所有任务都应该遵循以下准则:

  1. 响应中断:在任务中检查当前线程的中断状态,适时退出长时间运行的循环。
  2. 清理资源:即使在捕获到中断异常时,也要确保所有在任务中分配的资源得到释放。
  3. 恢复状态:若任务被中断,确保能够将涉及的数据或状态恢复到一个安全的状态。

1、shutdown

  • 将会拒绝新任务提交到线程池;
  • 等待待执行和正在执行的任务执行结束
executorService.shutdown();

2、shutdownNow

  • 将会拒绝新任务提交到线程池;
  • 取消待执行的任务
  • 尝试取消执行中的任务
executorService.shutdownNow();

3、awaitTermination();

阻塞下面的代码执行,直到线程池任务执行完毕或者超时,一般用于设置回调

executor.awaitTermination(2, TimeUnit.SECONDS)

4、常规用法

        try {// 等待所有任务完成,最多等待 3 秒if (!executor.awaitTermination(2, TimeUnit.SECONDS)) {// 如果超时还未完成,强制关闭线程池executor.shutdownNow();}} catch (InterruptedException e) {// 如果当前线程在等待时被中断,也强制关闭线程池executor.shutdownNow();Thread.currentThread().interrupt();}

参考:

Java线程池的shutdownnow()方法为什么不能停止运行的任务?_shutdownnow 关闭不了-CSDN博客

如何优雅的关闭Java线程池 - 清泉^_^ - 博客园

实战解析:如何确保Java线程池的优雅终结_java awaittermination-CSDN博客

java 并发之awaitTermination的使用-CSDN博客

Spring环境中正确关闭线程池的姿势_springboot 关闭线程池-CSDN博客

    相关文章:

  1. 深度学习常见模块实现001
  2. 为什么 Transformer 要使用多头注意力机制?
  3. Log4j2远程命令执行(CVE-2021-44228)复现
  4. 智能 GitHub Copilot 副驾驶® 更新升级!
  5. Spring JDBC 与数据访问:从性能优化到事务协同
  6. 如何实现一个构造函数继承另一个构造函数的属性和方法?给出ES5和ES6两种方式
  7. 软件研发过程中的技术债
  8. (Matlab)自动驾驶仿真 设计驾驶场景、配置传感器并生成合成 数据
  9. #Liunx内存管理# 页面分配器是按照什么方向来扫描zone的?
  10. 第一期第10讲
  11. ShellScript脚本编程
  12. C语言 - 深拷贝与浅拷贝详解
  13. 【扩散模型连载 · 第 2 期】逆向扩散建模与神经网络的角色
  14. Object.create(null)`和`{}`创建的对象有什么区别?
  15. git提交规范
  16. Linux的应用领域,测试与Linux,Linux的介绍,VirtualBox和Ubuntu的安装,VMware的安装和打开虚拟机CentOS
  17. 密码学(二)流密码
  18. Delphi HMAC算法
  19. Spring常用注解
  20. 大模型在轮状病毒肠炎预测及临床方案制定中的应用研究
  21. 做网站代码用什么软件/bt kitty磁力猫
  22. 有没有做皮艺的网站/官网seo关键词排名系统
  23. 自己做电商网站./国家职业技能培训学校
  24. pinterest设计网站/seo 公司
  25. b2b2c的网站/网站优化排名的方法
  26. html5手机网站模板 下载/活动推广文案