java中线程池的拒绝策略
Java中线程池的拒绝策略是在线程池无法接受新任务时,如何处理新提交的任务。Java提供了四种拒绝策略:
-
ThreadPoolExecutor.AbortPolicy(默认):当线程池无法处理新任务时,直接抛出RejectedExecutionException异常。
-
ThreadPoolExecutor.CallerRunsPolicy:当线程池无法处理新任务时,将任务返回给调用者执行。也就是在主线程中执行该任务。
-
ThreadPoolExecutor.DiscardPolicy:当线程池无法处理新任务时,直接丢弃该任务,不抛出任何异常。
-
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()
);
``
原文地址: https://www.cveoy.top/t/topic/hMK0 著作权归作者所有。请勿转载和采集!