这篇文章主要介绍了 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线程池使用AbortPolicy策略
基础教程推荐
- Java实现查找文件和替换文件内容 2023-04-06
- Java实现线程插队的示例代码 2022-09-03
- Java并发编程进阶之线程控制篇 2023-03-07
- Java数据结构之对象比较详解 2023-03-07
- ConditionalOnProperty配置swagger不生效问题及解决 2023-01-02
- JDK数组阻塞队列源码深入分析总结 2023-04-18
- springboot自定义starter方法及注解实例 2023-03-31
- Java文件管理操作的知识点整理 2023-05-19
- java基础知识之FileInputStream流的使用 2023-08-11
- java实现多人聊天系统 2023-05-19