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

Java线程池的拒绝策略

在 Java 线程池中,常见的拒绝策略:

  1. AbortPolicy(中止策略)
    • 特点:直接抛出 RejectedExecutionException 异常来拒绝新任务的提交。
    • 应用场景:适用于对系统的稳定性要求较高,不希望丢失任务,但希望能快速发现任务提交失败的情况。
ThreadPoolExecutor.AbortPolicy abortPolicy = new ThreadPoolExecutor.AbortPolicy();
  1. CallerRunsPolicy(调用者运行策略)
  • 特点:在调用者线程中直接执行被拒绝的任务。
  • 应用场景:适用于系统不希望丢弃任务,并且对任务的执行延迟要求不高的情况。当线程池已经饱和时,新任务会在提交任务的线程中执行,可能会导致提交任务的线程阻塞。
ThreadPoolExecutor.CallerRunsPolicy callerRunsPolicy = new ThreadPoolExecutor.CallerRunsPolicy();
  1. DiscardPolicy(丢弃策略)
  • 特点:默默丢弃无法处理的任务,不抛出异常。
  • 应用场景:适用于可以容忍任务丢失的情况,例如不重要的日志处理任务。
ThreadPoolExecutor.DiscardPolicy discardPolicy = new ThreadPoolExecutor.DiscardPolicy();
  1. DiscardOldestPolicy(丢弃最旧策略)
  • 特点:丢弃任务队列中最旧的未处理任务,然后将新任务加入队列重新尝试执行。
  • 应用场景:适用于任务的重要性相对较低,且希望尽量处理新提交的任务的情况。
ThreadPoolExecutor.DiscardOldestPolicy discardOldestPolicy = new ThreadPoolExecutor.DiscardOldestPolicy();

选择拒绝策略时,需要综合考虑以下因素:

  • 系统对任务丢失的容忍度:如果不能丢失任务,应避免使用 DiscardPolicy(丢弃策略)和 DiscardOldestPolicy(丢弃最旧策略)。
  • 对任务执行延迟的要求:如果不希望任务执行延迟增加,CallerRunsPolicy(调用者运行策略)可能不太适合。
  • 系统的稳定性和错误处理机制:AbortPolicy(中止策略)能及时抛出异常,便于发现和处理任务提交失败的情况。

例如,如果是一个关键的交易处理系统,不能丢失任务且对稳定性要求高,可能选择 AbortPolicy(中止策略)并在捕获异常后进行相应的处理和日志记录。而对于一个日志收集系统,对任务丢失有一定的容忍度,可以选择 DiscardPolicy(丢弃策略)以减少系统负担。

http://www.lryc.cn/news/421152.html

相关文章:

  • 【C++进阶】继承
  • 立体相机镜面重建(一)镜面标定
  • 【如何有效解决前端Vue中的常见难题】
  • CLAMP-1靶机渗透测试
  • JavaScript中的Truthy Falsy值以及等号判断
  • uniapp——展开和收起
  • WebGL2学习(2): GLSL ES 3.0
  • [大模型实战] DAMODEL云算力平台部署LLama3.1大语言模型
  • 驱动开发系列09 - Linux设备模型之设备,驱动和总线
  • HTML实现弹出层
  • Android控件详解
  • 记忆化搜索专题篇
  • 入网测评检查项大全(安全资料)
  • uni-app 开发App时调用uni-push 实现在线系统消息推送通知 保姆教程
  • 13.StringRedisTemplete使用
  • [工具]-gitee+pycharm-配置
  • 中间件是一种在客户端和服务器之间进行通信和处理的软件组件或服务
  • RCE-eval长度限制突破技巧
  • 【黑马】MyBatis
  • oracle创建dblink使得数据库A能够访问数据库B表LMEAS_MFG_FM的数据
  • git config 如何配置用户账户
  • SpringBoot基础(二):配置文件详解
  • Web安全(一)-靶场搭建过程-基于docker
  • 【JavaEE】单例模式和阻塞队列
  • RCE绕过技巧
  • Spring源码解析(31)之事务配置文件解析以及核心对象创建过程
  • win11安装docker报错记录
  • 【vulnhub】CLAMP 1.0.1靶机
  • GPS跟踪环路MATLAB之——数字锁相环
  • docker开发环境搭建-关于数据库的IP是什么