如下所示为 Java 中线程池的构造器,线程池有核心线程数、最大线程数、保活时间、任务队列、线程工厂和拒绝策略这六大参数。本文主要介绍一下 Java 线程池框架中提供的四种拒绝策略。
public ThreadPoolExecutor(int corePoolSize,
int maximumPoolSize,
long keepAliveTime,
TimeUnit unit,
BlockingQueue<Runnable> workQueue,
ThreadFactory threadFactory,
RejectedExecutionHandler handler) {
...
}
1 AbortPlicy
这是 Executors
提供的几种线程池所使用的拒绝策略,线程池饱和之后,如果还有新任务提交,那么新任务会被丢弃且抛出异常。
2 DiscardPolicy
直接丢弃,不抛出异常
3 DiscardOldestPolicy
丢弃任务队列头部的一个任务,然后把新任务放到队列尾部
4 CallerRunsPolicy
用调用者所在的线程来运行新任务,这样 execute()
函数就会被阻塞,直到新任务完成。