线程池拒绝策略有哪些?默认是哪个?

本文详细介绍了Java线程池的四种拒绝策略:AbortPolicy、CallerRunsPolicy、DiscardPolicy和DiscardOldestPolicy,阐述了它们的工作原理,并提供了设置示例。选择合适的策略对保证系统稳定性和性能至关重要。
摘要由CSDN通过智能技术生成

Java 线程池的拒绝策略主要有以下几种:

  1. AbortPolicy(默认)

    • 抛出一个 RejectedExecutionException 异常,阻止系统继续执行新任务。
    • 这是默认的拒绝策略,如果不显式地指定拒绝策略,线程池会使用 AbortPolicy。
  2. CallerRunsPolicy

    • 当线程池无法处理新任务时,将任务返回给提交任务的线程执行。
    • 这样可以保证任务不会丢失,但可能会影响提交任务的线程的性能。
  3. DiscardPolicy

    • 直接丢弃无法处理的任务,不做任何处理。
    • 丢弃的任务不会被执行,也不会抛出异常。
  4. DiscardOldestPolicy

    • 丢弃等待队列中最早的任务,并尝试重新提交当前任务。
    • 这样可以尽量保留新提交的任务,但可能会导致一些等待执行的任务被丢弃。

这些拒绝策略可以在创建线程池时通过 ThreadPoolExecutor 的构造函数来指定,或者通过 setRejectedExecutionHandler() 方法进行设置。

例如,如果要指定线程池使用 CallerRunsPolicy 拒绝策略,可以这样设置:

ThreadPoolExecutor executor = new ThreadPoolExecutor(corePoolSize, maximumPoolSize, keepAliveTime, TimeUnit.SECONDS, workQueue);
executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());

需要根据实际的业务需求和系统特点来选择合适的拒绝策略,以保证系统的稳定性和性能。

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值