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

线程池的拒绝策略适用场景思考

ThreadPoolExecutor有四种拒绝策略。刚开始学习线程池的时候我就觉得,就是应该当任务饱和(达到拒绝策略)时,就应该拒绝任务,抛出异常。最近仔细思考了下,既然线程池这么设计,也应该有一定的道理。
在这里插入图片描述

默认的拒绝策略如下:AbortPolicy(丢弃任务并抛出 RejectedExecutionException 异常)
在这里插入图片描述
在这里插入图片描述

线程池的拒绝策略及使用场景

  • AbortPolicy(默认策略)
    行为:丢弃任务,并抛出RejectedExecutionException异常
    适用场景:关键业务场景(如金融支付系统),需要通过异常快速知道系统过载
  • CallerRunsPolicy
    行为:由提交任务的线程(如主线程)直接执行被拒绝的任务。
    适用场景:允许任务降级且对性能要求不高的场景(如日志记录),通过减缓提交速度防止线程池过载
  • DiscardPolicy
    行为:静默丢弃被拒绝的任务,不抛出异常
    适用场景:非核心任务(如统计点击量),允许任务丢失且无需感知失败
  • DiscardOldestPolicy
    行为:丢弃任务中最旧的任务,重新提交新任务
    适用场景:需要优先处理最新任务的场景(如实时消息推送),旧任务可以被覆盖

自定义拒绝策略

通过实现RejectExecutionHandler接口,可制定策略。比如写具体报错信息,写入数据库等操作。
Dubbo的线程池拒绝策略:记录详细日志、线程堆栈信息并抛出异常,便于问题排查
在这里插入图片描述
在这里插入图片描述

相关文章:

  • 网络编程套接字【端口号/TCPUDP/网络字节序/socket编程接口/UDPTCP网络实验】
  • 双曲空间学习记录
  • TypeScript Symbols 深度解析:在 Vue3 中的高级应用实践
  • 人脸识别-检测数据集
  • C++ :顶层const与底层const的区别
  • 【Linux网络(三)】网络基础套接字
  • 【CXX-Qt】1.5 使用CMake构建
  • 《深入理解AOP编程:从基础概念到Spring实现》
  • C++中std::shuffle 的使用
  • MySQL 多列 IN 查询详解:语法、性能与实战技巧
  • 当 Selenium 的 click() /send_keys()等方法失效时:JavaScript 在 UI 自动化测试中的神奇用法
  • 工作记录 2017-02-06
  • gitlab 提交pr
  • 搭建Nginx
  • springboot第三站(1) web开发引入
  • Docker下载,包含Win、Mac
  • The test of the entire book_《Effective Modern C++》notes
  • Spring Boot集成PageHelper:轻松实现数据库分页功能
  • Linux系统之qrencode工具的安装与基本使用
  • 云安全相关博客阅读(四)
  • 秦洪看盘|重估叙事主题卷土重来,给A股注入新活力
  • 奥利弗·斯通回顾越战50周年:我们不善于总结历史教训
  • 对话哭泣照被恶意盗用成“高潮针”配图女生:难过又屈辱
  • 上交现场配乐4K修复版《神女》:默片巅峰有了新的打开方式
  • 上海将发布新一版不予行政处罚清单、首份减轻行政处罚清单
  • 南通市委常委、市委秘书长童剑跨市调任常州市委常委、组织部部长