Java 线程池中的几种拒绝策略

如下所示为 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() 函数就会被阻塞,直到新任务完成。