博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java线程池之四种拒绝策略
阅读量:3956 次
发布时间:2019-05-24

本文共 1481 字,大约阅读时间需要 4 分钟。

java线程池的四种拒绝策略

ThreadPoolExcutor中有四个内部类实现了线程池的拒绝策略。当然我们也可以自己定义,这里讲解一下这四个已经实现的拒绝策略。

什么情况下会拒绝新的任务

在什么情况下,线程池会拒绝新提交的任务呢。

在这里插入图片描述
在ThreadPoolExcutor的构造方法中,有这几个参数,参数的意义请参考:
当maximumPoolSize和workQueue达到最大时,线程池会拒绝新的任务的提交

演示代码

public class ThreadPoolDemo {    public static void main(String[] args) {        ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(1,1,20,                TimeUnit.MINUTES, new ArrayBlockingQueue<>(1),new ThreadPoolExecutor.AbortPolicy());        for (int i = 0; i < 3; i++) {            final int temp = i;            threadPoolExecutor.execute(new Runnable() {                @Override                public void run() {                    try {                        Thread.sleep(4000);                    } catch (InterruptedException e) {                        e.printStackTrace();                    }                    System.out.println(Thread.currentThread().getName() + "完成" + temp);                }            });        }    }}

这里我们创建了线程池的核心线程数只有1,最大线程数也只有1,工作队列也只有1,下面我们提交了三个任务。当第一个任务提交时,此时会创建一个新的线程,当第二个任务提交时,此时因为线程池中的线程数==核心线程数,且工作队列未满,任务2加入工作队列。当第三个任务到达时,因为线程池中的线程数等于核心线程数,且工作队列以及满了,同时,线程池中的最大线程数也已经到达了,所以任务3将被拒绝。

这里我们先演示AbortPolicy。

AbortPolicy

这个拒绝策略当新的任务被拒绝时,会跑出一个异常

在这里插入图片描述
运行结果如下:
在这里插入图片描述
这里我们看到,新提交的任务没有运行,并且抛出了一个异常

DiscardPolicy

这个拒绝策略将会悄悄的忽略掉被拒绝的任务,也不会抛出异常

在这里插入图片描述
运行结果:
在这里插入图片描述
既没有抛出异常,也没有运行任务

CallerRunsPolicy

这个拒绝策略将执行该任务,但是有提交者自己执行

在这里插入图片描述
运行结果:
在这里插入图片描述
这里虽然执行了任务2,但是该任务所执行的线程是在main(即它的提交者)

DiscardOldestPolicy

这个拒绝策略将会把最先进入工作队列的任务出队,为新的任务腾出位置

在这里插入图片描述
运行结果:
在这里插入图片描述
这里可以看到,最先进入工作队列的任务1被出队了。

转载地址:http://idtzi.baihongyu.com/

你可能感兴趣的文章
Python字符与数字的相互转换
查看>>
java 的一些知识
查看>>
C 指针解读
查看>>
有关乱码的处理---中国程序员永远无法避免的话题
查看>>
WEB互动的革命 - JSF框架中使用的设计模式介绍
查看>>
J2EE程序中的SQL语句自动构造方法讲解
查看>>
JSP的运行内幕
查看>>
完全优化MySQL数据库性能的八大巧方法
查看>>
白话诠释ERP
查看>>
反射在Java Swing事件处理中的应用
查看>>
15 hot programming trends -- and 15 going cold
查看>>
我最恐惧的事情是竞争力的丧失
查看>>
java Swing 自动视感包
查看>>
IT经理激励员工的101招
查看>>
服务好“最后一公里”,高效CDN架构经验
查看>>
一个软件开发培训学员的来信及回复
查看>>
马云的精辟语录
查看>>
每一位Android开发者应该知道的Android体系架构和开发库
查看>>
次级贷!
查看>>
计算机科学反思录
查看>>