目录
一.四种拒绝策略
拒绝策略类型 | 说明 |
ThreadPoolExecutor.AbortPolicy | 直接抛出异常 |
ThreadPoolExecutor.DiscardPolicy | 丢弃当前拒绝的任务(不抛出异常) |
ThreadPoolExecutor.DiscardOldestPolicy | 将工作队列中最早的任务丢弃,去执行新的任务 |
ThreadPoolExecutor.CallerRunsPolicy | 交给调用线程池的线程处理 |
二.拒绝策略的使用
RejectedExecutionHandler handler = new ThreadPoolExecutor.AbortPolicy();
ThreadPoolExecutor threadPool = new ThreadPoolExecutor(
corePoolSize, //核心线程数
maximumPoolSize, //最大线程数
keepAliveTime, //线程存活时间
unit, //线程存活时间单位
workQueue, //工作队列
threadFactory, //线程工厂
handler); //拒绝策略
for (int i = 1; i <= 5; i++) {
try {
threadPool.execute();
} catch (Exception e) {
System.out.println(Thread.currentThread().getName());
}
}
当工作任务大于最大线程 + 阻塞队列会执行拒绝策略时:
1.AbortPolicy默认策略会拒绝任务,并抛出异常
2.DiscardPolicy会拒绝任务,并且不会抛出异常
3.DiscardOldestPolicy会把阻塞队列最老的任务丢弃,去执行新的任务
4.CallerRunsPolicy 调用线程执行对于的任务