Java中线程池的拒绝策略是在线程池无法接受新任务时,如何处理新提交的任务。Java提供了四种拒绝策略:

  1. ThreadPoolExecutor.AbortPolicy(默认):当线程池无法处理新任务时,直接抛出RejectedExecutionException异常。

  2. ThreadPoolExecutor.CallerRunsPolicy:当线程池无法处理新任务时,将任务返回给调用者执行。也就是在主线程中执行该任务。

  3. ThreadPoolExecutor.DiscardPolicy:当线程池无法处理新任务时,直接丢弃该任务,不抛出任何异常。

  4. ThreadPoolExecutor.DiscardOldestPolicy:当线程池无法处理新任务时,先丢弃队列中最旧的任务,然后尝试将新任务添加到队列中。

除了以上四种拒绝策略,也可以自定义拒绝策略,只需要实现RejectedExecutionHandler接口,并实现其rejectedExecution()方法即可。

例如,自定义一个拒绝策略类CustomRejectedExecutionHandler:

public class CustomRejectedExecutionHandler implements RejectedExecutionHandler {
    @Override
    public void rejectedExecution(Runnable r, ThreadPoolExecutor executor) {
        // 自定义拒绝策略的处理逻辑
        // ...
    }
}

然后在创建线程池时,通过setRejectedExecutionHandler()方法设置自定义的拒绝策略:

ThreadPoolExecutor executor = new ThreadPoolExecutor(
    corePoolSize,
    maximumPoolSize,
    keepAliveTime,
    TimeUnit.MILLISECONDS,
    new ArrayBlockingQueue<>(queueSize),
    new CustomRejectedExecutionHandler()
);
``
java中线程池的拒绝策略

原文地址: https://www.cveoy.top/t/topic/hMK0 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录