不让线程池丢弃任务,应选择哪个拒绝策略

线程池拒绝策略概览

  • AbortPolicy:抛出 RejectedExecutionException 拒绝新任务。
  • CallerRunsPolicy:调用线程执行被拒绝的任务,不丢弃任务。
  • DiscardPolicy:直接丢弃新任务。
  • DiscardOldestPolicy:丢弃最早的未处理任务。

CallerRunsPolicy 策略详解

  • 适用场景:当任务不能被丢弃,且应用程序可以容忍处理延迟时。
  • 工作机制:如果线程池未关闭,执行 execute 方法的线程将直接运行被拒绝的任务。

CallerRunsPolicy 策略的风险

  • 主线程阻塞:如果被拒绝的任务非常耗时,并且是主线程提交的,可能会导致主线程阻塞。
  • 性能影响:可能导致程序整体性能下降,因为新任务的提交速度会降低。

CallerRunsPolicy 策略的解决方案

  • 增加队列容量:在内存允许的情况下,增加阻塞队列的大小,以容纳更多任务。
  • 调整线程池参数:调整 maximumPoolSize 以提高任务处理速度,减少内存溢出的风险。

任务持久化方案

    评论
    成就一亿技术人!
    拼手气红包6.0元
    还能输入1000个字符
     
    红包 添加红包
    表情包 插入表情
     条评论被折叠 查看
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

    当前余额3.43前往充值 >
    需支付:10.00
    成就一亿技术人!
    领取后你会自动成为博主和红包主的粉丝 规则
    hope_wisdom
    发出的红包
    实付
    使用余额支付
    点击重新获取
    扫码支付
    钱包余额 0

    抵扣说明:

    1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
    2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

    余额充值