线程池的拒绝策略有哪些?
在线程池中,当提交的任务数量超过了线程池的最大容量,线程池就需要使用拒绝策略来处理无法处理的新任务。Java 中提供了 4 种默认的拒绝策略:
- AbortPolicy(默认策略):直接抛出 runtime 异常,阻止系统正常运行。
- CallerRunsPolicy:由提交该任务的线程来执行这个任务。
- DiscardPolicy:直接丢弃任务,不给予任何处理。
- DiscardOldestPolicy:丢弃队列中最老的一个请求,尝试再次提交当前任务。
除了这些默认的策略之外,我们也可以自定义自己的拒绝策略,实现RejectedExecutionHandler接口即可。
public class CustomRejectedExecutionHandler implements RejectedExecutionHandler {
@Override
public void rejectedExecution(Runnable r, ThreadPoolExecutor executor) {
// 自定义的拒绝策略处理逻辑
}
}