线程池的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
deafen由调⽤线程处理该任务(不会丢弃任务,最后所有的任务都执⾏了,并不会抛出异常)
小学网络课程哪家好
失败者英文使⽤最好使⽤默认的拒绝策略。
测试代码:
public class MainTest {
public static void main(String[] args) {
雄伟壮丽的意思//核⼼线程数
yihu
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();
}
} }