线程池的4种拒绝策略

更新时间:2023-05-17 12:12:20 阅读: 评论:0

线程池的4种拒绝策略
new ThreadPoolExecutor(corePoolSize,maximumPoolSize,keepAliveTime,unit,workQueue,new ThreadPoolExecutor.AbortPolicy())
1.ThreadPoolExecutor.AbortPolicy
线程池的默认拒绝策略为AbortPolicy,即丢弃任务并抛出RejectedExecutionException异常(即后⾯提交的请求不会放⼊队列也不会直接消费并抛出异常);
2.ThreadPoolExecutor.DiscardPolicy
丢弃任务,但是不抛出异常。如果线程队列已满,则后续提交的任务都会被丢弃,且是静默丢弃(也不会抛出任何异常,任务直接就丢弃了)。
3.ThreadPoolExecutor.DiscardOldestPolicy
丢弃队列最前⾯的任务,然后重新提交被拒绝的任务(丢弃掉了队列最前的任务,并不抛出异常,直接丢弃了)。
4.ThreadPoolExecutor.CallerRunsPolicy
由调⽤线程处理该任务(不会丢弃任务,最后所有的任务都执⾏了,并不会抛出异常)
使⽤最好使⽤默认的拒绝策略。
测试代码:
public class MainTest {
public static void main(String[] args) {
//核⼼线程数
int corePoolSize = 3;
//最⼤线程数
int maximumPoolSize = 6;
//超过 corePoolSize 线程数量的线程最⼤空闲时间
long keepAliveTime = 2;
/
/以秒为时间单位
生死别离TimeUnit unit = TimeUnit.SECONDS;
//创建⼯作队列,⽤于存放提交的等待执⾏任务
BlockingQueue<Runnable> workQueue = new ArrayBlockingQueue<Runnable>(2);
ThreadPoolExecutor threadPoolExecutor = null;书痴
try {
//Executors.
//创建线程池
threadPoolExecutor = new ThreadPoolExecutor(corePoolSize,
maximumPoolSize,
keepAliveTime,
unit,
workQueue,
月经推迟几天查早孕
new ThreadPoolExecutor.CallerRunsPolicy());
重力的应用
//循环提交任务
for (int i = 0; i < 12; i++) {
行政岗位工作内容
//提交任务的索引
悲剧的意思final int index = (i + 1);
threadPoolExecutor.submit(() -> {
//线程打印输出
System.out.println("⼤家好,我是线程:" + index);
try {
/
/模拟线程执⾏时间,10s
Thread.sleep(10000);
} catch (InterruptedException e) {
e.printStackTrace();
}
});
市场部的职责//每个任务提交后休眠500ms再提交下⼀个任务,⽤于保证提交顺序
Thread.sleep(500);
}
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
threadPoolExecutor.shutdown();征东将军
}
} }

本文发布于:2023-05-17 12:12:20,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/82/667484.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:任务   线程   提交   丢弃   不会   抛出   队列   拒绝
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图