Java线程池四种拒绝策略

本文围绕Java线程池展开,介绍了其出现原因,是为在硬件资源一致时更迅速完成大批量任务。阐述了线程池优势,如利用懒加载避免资源浪费、适合大批量线程执行。还说明了线程池拒绝执行线程的情况及四种拒绝策略,最后进行了执行测试。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

线程池出现原因?

当线程数量越来越多的时候,单一按照流程走下去,会发现执行效率非常低下,无法满足大批量操作需求,那么如何在硬件资源一致地条件下,更迅速地完成任务,这时线程池就出现了。

线程池的优势?

1. 利用懒加载方式创建线程且能够充分利用现有线程资源,避免资源浪费。

2. 适合大批量执行线程,效率更快。

线程池什么情况下会拒绝执行线程?

当线程池中的线程达到核心线程数,阻塞队列已满且达到最大线程数,这是如果还有线程要执行,线程池将采取一些拒绝策略,防止源源不断地线程压垮整个服务。

拒绝策略方式

1. AbortPolicy:  丢弃任务,并抛出异常信息,线程池默认地拒绝策略,适用于比较关键地业务。

2.DiscardPolicy:丢弃任务,不抛出异常,啥也不干,适用于无关紧要业务,如文章阅读量。

3.DiscardOldestPolicy:  丢弃阻塞队列中最老的任务,并将新任务加入,是否要采用此种拒绝策略,还得根据实际业务是否允许丢弃老任务来认真衡量。

4.CallerRunsPolicy:  由调用线程直接运行该任务,适用于并发量比较小,性能要求不高,不允许失败业务。

执行测试

 public static ThreadPoolExecutor getAbordPool(){
    return new ThreadPoolExecutor(5,5,10,TimeUnit.SECONDS,
             new ArrayBlockingQueue<>(10),new ThreadPoolExecutor.AbortPolicy());
 }
    public static void main(String args[]){
        ThreadPoolExecutor threadPoolExecutor = getAbordPool();
       while(true){
           threadPoolExecutor.execute(()->{
               try {
                   System.out.println("queue="+threadPoolExecutor.getQueue().size());
                   Thread.sleep(1000);
               } catch (InterruptedException e) {
                   e.printStackTrace();
               }
           });
       }
    }

执行结果

标题

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

如风之夏

感谢,你的鼓励是我前进的动力。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值