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内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java实现房屋出租系统详解

    Java实现房屋出租系统详解

    这篇文章主要介绍了实现Java房屋出租系统的实现过程,文章条理清晰,在实现过程中加深了对相关概念的理解,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-10-10
  • 解决新版 Idea 中 SpringBoot 热部署不生效的问题

    解决新版 Idea 中 SpringBoot 热部署不生效的问题

    这篇文章主要介绍了解决新版 Idea 中 SpringBoot 热部署不生效的问题,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-08-08
  • SpringMVC使用hibernate-validator进行参数校验最佳实践记录

    SpringMVC使用hibernate-validator进行参数校验最佳实践记录

    这篇文章主要介绍了SpringMVC使用hibernate-validator进行参数校验最佳实践,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-05-05
  • java  异常详解及应用实例

    java 异常详解及应用实例

    这篇文章主要介绍了java 异常详解及应用实例的相关资料,需要的朋友可以参考下
    2017-01-01
  • Java中的锁与锁的状态升级详细解读

    Java中的锁与锁的状态升级详细解读

    这篇文章主要介绍了Java中的锁与锁的状态升级详细解读,Java 1.6以后官方针对锁的优化,主要是增加了两种新的锁:偏向锁和轻量级锁,再加上本身重量级锁,那么锁基本上可以大致分为这三种,它们之间的区别主要是体现在等待时间上面,需要的朋友可以参考下
    2024-01-01
  • flowable动态创建多级流程模板实现demo

    flowable动态创建多级流程模板实现demo

    这篇文章主要为大家介绍了flowable动态创建多级流程模板实现demo,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-05-05
  • Java有趣好玩的图形界面开发八个案例实现

    Java有趣好玩的图形界面开发八个案例实现

    今天使用GUI技术写了几个练习的Demo,希望对大家学习图形用户界面有所帮助,感兴趣的同学来看看吧,动手敲一遍理解更通透
    2022-05-05
  • Java 实现图片压缩的两种方法

    Java 实现图片压缩的两种方法

    这篇文章主要介绍了Java 实现图片压缩的两种方法,帮助大家更好的理解和使用Java,感兴趣的朋友可以了解下
    2020-09-09
  • Java详解多线程协作作业之信号同步

    Java详解多线程协作作业之信号同步

    信号量同步是指在不同线程之间,通过传递同步信号量来协调线程执行的先后次序。CountDownLatch是基于时间维度的Semaphore则是基于信号维度的
    2022-05-05
  • SpringBoot 项目的创建与启动步骤详解

    SpringBoot 项目的创建与启动步骤详解

    这篇文章主要介绍了SpringBoot 项目的创建与启动,本文分步骤给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-03-03

最新评论