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

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

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

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

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

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

自定义拒绝策略

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

http://www.dtcms.com/a/76416.html

相关文章:

  • 网络编程套接字【端口号/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工具的安装与基本使用
  • 云安全相关博客阅读(四)
  • 使用静态库动态库也要头文件
  • 【Netty】消息分发处理方式
  • Unity shader管道液体流入并流出效果
  • Spring Boot 静态访问配置属性的解决方案
  • EditRocket for Mac v5.0.2 文本编辑器 支持M、Intel芯片
  • 从信息熵上看图像
  • RISCV虚拟化环境搭建
  • windows主机持久化技术
  • 实用插件推荐 -------- 一个可以将任意语言(python、C/C++、go、java等)的程序转换为汇编语言的小插件
  • 神经网络量化3-全连接层实现量化