线程池中的拒绝策略

线程池中的拒绝策略

什么情况下出发拒绝策略?

  • 当提交任务数大于corePoolSize的时候,会将多余任务缓存在workQueue阻塞队列中
  • 当阻塞队列满了,会扩充线程数
  • 当扩充线程数大于maximumPoolSize的时候,就会触发拒绝策略

也就是说,当任务数大于workQueue.size() 和maximumPoolSize时,会触发拒绝策略

线程池的四种拒绝策略

在这里插入图片描述

第一种,AbortPolicy(中止策略)

很简单,当触发拒绝策略时,抛出一个RejectedExecutionException异常

这是线程池默认的拒绝策略,在任务不能再提交的时候,抛出异常,及时反馈程序运行状态。如果是比较关键的业务,推荐使用此拒绝策略,这样子在系统不能承载更大的并发量的时候,能够及时的通过异常发现。

第二种,DiscardPolicy(丢弃策略)

也很简单,当触发拒绝策略时,静默地丢弃被拒绝的任务,仅此而已

使用此策略,可能会使我们无法发现系统的异常状态。建议是一些无关紧要的业务采用此策略。例如,某些视频网站统计视频的播放量就是采用的这种拒绝策略。

第三种,DiscardOldestPolicy(丢弃最早的策略)

当触发拒绝策略时,会丢弃掉最早的未被处理的任务,然后重新尝试提交被拒绝的任务(被拒绝的任务,就是触发拒绝策略的任务),但是当执行器挂掉的时候,会丢掉被拒绝的任务

第四种CallerRunsPolicy(找帮手策略)

第四种CallerRunsPolicy(找帮手策略)

触发拒绝策略时,会在执行方法的调用者线程中执行任务,除非调用者线程挂掉,则会直接丢弃任务

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值