线程池的5种拒绝策略
拒绝策略:
等待队列已经排满了,再也塞不下新任务,同时线程池中线程也已经达到maximumPoolSize数量,无法继续为新任务服务,这个时候就需要使用拒绝策略来处理。
1.new ThreadPoolExecutor.AbortPolicy()
默认拒绝策略,不执行任务抛出异常
2.new ThreadPoolExecutor.CallerRunsPolicy()
把当前的任务交给主线程执行
3.new ThreadPoolExecutor.DiscardOldestPolicy()
抛弃队列中等待最久的任务,然后把当前任务加入队列中尝试再次提交当前任务。
4.new ThreadPoolExecutor.DiscardPolicy()
直接丢弃任务,不予任何处理也不抛出异常
5.自定义拒绝策略:
new RejectedExecutionHandler() {
@Override
public void rejectedExecution(Runnable r, ThreadPoolExecutor executor) {
System.out.println("执行了拒绝策略");
}
}