Java线程池使用AbortPolicy策略

 更新时间:2022年06月30日 08:46:39   作者:​ Gxin   ​  
这篇文章主要介绍了 Java线程池使用AbortPolicy策略,文章围绕主题展开详细的内容介绍,具有一定的参考价值,感兴趣的小伙伴可以参考一下

线程池ThreadPoolExecutor的拒绝策略

线程池中的线程资源全部被占用时,对新添加的Task任务有不同的处理策略,在默认的情况下,

ThreadPoolExecutor类中有4种不同的处理方式:

  • AbortPolicy:当任务添加到线程池中被拒绝时,它将抛出RejectExecutionException异常。
  • CallerRunsPolicy:当任务添加到线程池中被拒绝时,会使用调用线程池的Thread线程对象处理被拒绝的任务。
  • DiscardOldestPolicy: 当任务添加到线程池中被拒绝时,线程池会放弃等待队列中最旧的未处理任务,然后将被拒绝的任务添加到等待队列中。
  • DiscardPolicy:当任务添加到线程池中被拒绝时,线程池将丢弃被拒绝的任务。

AbortPolicy策略

AbortPolicy策略是当任务添加到线程池中被拒绝时,它将抛出RejectedExecutionException异常。

线程执行代码如下:

public class FirstRunnable implements Runnable {
    @Override
    public void run() {
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("HH:mm:ss");
        try {
            System.out.println(Thread.currentThread().getName() +"  开始时间:"+simpleDateFormat.format(new Date()));
            Thread.sleep(1000);
            System.out.println(Thread.currentThread().getName() +"  结束时间:"+simpleDateFormat.format(new Date()));
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}

运行类代码如下:

public class AbortPolicyRun {
    public static void main(String[] args) {
        FirstRunnable firstRunnable = new FirstRunnable();
        ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(2, 3, 5, TimeUnit.SECONDS, new ArrayBlockingQueue<Runnable>(2), new ThreadPoolExecutor.AbortPolicy());
        for (int i = 0; i < 7 ; i++) {
            threadPoolExecutor.execute(firstRunnable);
        }
    }
}

运行结果如下:

Exception in thread "main" java.util.concurrent.RejectedExecutionException: Task com.ozx.concurrentprogram.executor.service.FirstRunnable@6c629d6e rejected from java.util.concurrent.ThreadPoolExecutor@5f5a92bb[Running, pool size = 3, active threads = 3, queued tasks = 2, completed tasks = 0]
    at java.util.concurrent.ThreadPoolExecutor$AbortPolicy.rejectedExecution(ThreadPoolExecutor.java:2063)
    at java.util.concurrent.ThreadPoolExecutor.reject(ThreadPoolExecutor.java:830)
    at java.util.concurrent.ThreadPoolExecutor.execute(ThreadPoolExecutor.java:1379)
    at com.ozx.concurrentprogram.executor.controller.AbortPolicyRun.main(AbortPolicyRun.java:19)
pool-1-thread-3  开始时间:16:20:27
pool-1-thread-1  开始时间:16:20:27
pool-1-thread-2  开始时间:16:20:27
pool-1-thread-2  结束时间:16:20:28
pool-1-thread-2  开始时间:16:20:28
pool-1-thread-1  结束时间:16:20:28
pool-1-thread-1  开始时间:16:20:28
pool-1-thread-3  结束时间:16:20:28
pool-1-thread-1  结束时间:16:20:29
pool-1-thread-2  结束时间:16:20:29

使用AbortPolicy策略后,线程任务数量超出线程池最大线程数时,线程池将抛出java.util.concurrent.RejectedExecutionException异常。

到此这篇关于 Java线程池使用AbortPolicy策略的文章就介绍到这了,更多相关Java AbortPolicy内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • BufferedInputStream(缓冲输入流)详解_动力节点Java学院整理

    BufferedInputStream(缓冲输入流)详解_动力节点Java学院整理

    这篇文章主要为大家详细介绍了BufferedInputStream缓冲输入流的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-05-05
  • java使用反射访问成员变量的值示例

    java使用反射访问成员变量的值示例

    这篇文章主要介绍了java使用反射访问成员变量的值,结合实例形式分析了java基于反射机制操作类成员变量相关实现技巧,需要的朋友可以参考下
    2019-07-07
  • Spring-cloud Config Server的3种配置方式

    Spring-cloud Config Server的3种配置方式

    这篇文章主要介绍了Spring-cloud Config Server的3种配置方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-09-09
  • Java多线程及分布式爬虫架构原理解析

    Java多线程及分布式爬虫架构原理解析

    这篇文章主要介绍了Java多线程及分布式爬虫架构原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-10-10
  • 看过就懂的java零拷贝及实现方式详解

    看过就懂的java零拷贝及实现方式详解

    这篇文章主要为大家详细的介绍了什么是零拷贝,传统的IO执行流程,零拷贝相关的知识点回顾,零拷贝实现的几种方式及java提供的零拷贝方式相关内容,有需要的朋友可以借鉴参考下
    2022-01-01
  • 详解IDEA使用Maven项目不能加入本地Jar包的解决方法

    详解IDEA使用Maven项目不能加入本地Jar包的解决方法

    这篇文章主要介绍了详解IDEA使用Maven项目不能加入本地Jar包的解决方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-08-08
  • HashMap的底层实现原理分析

    HashMap的底层实现原理分析

    本文主要介绍了HashMap的底层实现结构,包括JDK1.7和1.8版本的区别,JDK1.7使用数组加链表实现,而JDK1.8引入了红黑树优化,文章详细解释了HashMap如何确定哈希桶数组索引位置、put方法的执行过程以及扩容原理
    2025-01-01
  • SpringCloud集成zookeeper实现服务注册并访问功能

    SpringCloud集成zookeeper实现服务注册并访问功能

    zookeeper和eureka一样,是用于充当服务注册功能服务器的一个springcloud插件,这篇文章主要介绍了SpringCloud集成zookeeper实现服务注册并访问,需要的朋友可以参考下
    2022-06-06
  • 简单验证码生成Java版

    简单验证码生成Java版

    这篇文章主要为大家详细介绍了简单验证码生成Java版,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-11-11
  • Java高级面试题小结

    Java高级面试题小结

    本文主要介绍了一些在Java面试过程中的一些高级面试题,包括对部分名词的释义及代码解析,具有一定收藏价值,需要的朋友可以参考下
    2017-09-09

最新评论