ThreadPoolExecutor的拒绝策略参数
时间: 2023-11-17 16:03:42 浏览: 93
ThreadPoolExecutor的拒绝策略参数是用于处理线程池中任务队列已满,无法继续添加任务时的策略。当线程池中的任务队列已满,且线程池中的线程数已经达到最大线程数时,线程池会采用拒绝策略来处理新的任务。ThreadPoolExecutor提供了四种拒绝策略参数,分别是:
1. AbortPolicy:直接抛出异常,默认策略;
2. CallerRunsPolicy:只用调用者所在线程来运行任务;
3. DiscardOldestPolicy:丢弃队列里最近的一个任务,并执行当前任务;
4. DiscardPolicy:不处理,直接丢弃任务。
自定义拒绝策略需要实现RejectedExecutionHandler接口,并重写rejectedExecution方法,该方法会在任务被拒绝时被调用。在该方法中,可以自定义处理被拒绝的任务,例如重新开启一个线程来执行被拒绝的任务。
示例代码如下:
```java
public class CustRejectedExecutionHandler implements RejectedExecutionHandler {
@Override
public void rejectedExecution(Runnable r, ThreadPoolExecutor executor) {
new Thread(r,"线程:"+new Random().nextInt(10)).start();
}
}
ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(
1, 2, 10, TimeUnit.MICROSECONDS, new LinkedBlockingDeque<>(2), new CustRejectedExecutionHandler());
```
默认的拒绝策略是AbortPolicy,其实现代码如下:
```java
public static class AbortPolicy implements RejectedExecutionHandler {
public AbortPolicy() { }
public void rejectedExecution(Runnable r, ThreadPoolExecutor e) {
throw new RejectedExecutionException("Task " + r.toString() + " rejected from " + e.toString());
}
}
```
阅读全文
相关推荐


















