RejectedExecutionHandler 拒绝策略
时间: 2024-01-10 15:04:37 浏览: 25
RejectedExecutionHandler是Java线程池中的一个接口,它用于处理线程池中任务队列已满时的拒绝策略。当线程池中的任务队列已满,并且没有空闲线程可用时,就会触发拒绝策略。
Java线程池中提供了四种预定义的拒绝策略:
1. AbortPolicy:直接抛出RejectedExecutionException异常,阻止系统正常运行。
2. CallerRunsPolicy:只要线程池未关闭,该策略直接在调用者线程中,运行当前被丢弃的任务。
3. DiscardOldestPolicy:丢弃最老的一个请求,也就是即将被执行的一个任务,并尝试重新提交当前任务。
4. DiscardPolicy:直接丢弃这个任务,不做任何处理也不抛出异常。
除了这四种预定义的拒绝策略,用户还可以自定义RejectedExecutionHandler接口的实现来处理拒绝策略。
相关问题
线程池自定义拒绝策略
线程池的拒绝策略决定了当线程池无法执行新的任务时如何处理这些任务。Java中的线程池使用RejectedExecutionHandler接口来定义拒绝策略。下面是一个自定义拒绝策略的示例:
```java
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.RejectedExecutionHandler;
import java.util.concurrent.TimeUnit;
public class CustomRejectedExecutionHandler implements RejectedExecutionHandler {
@Override
public void rejectedExecution(Runnable r, ThreadPoolExecutor executor) {
// 自定义处理被拒绝的任务逻辑
System.out.println("Task rejected: " + r.toString());
// 可以根据实际需求进行不同的处理,例如记录日志、抛出异常等
}
}
// 在创建线程池时设置自定义的拒绝策略
ThreadPoolExecutor executor = new ThreadPoolExecutor(
corePoolSize, // 核心线程数
maximumPoolSize, // 最大线程数
keepAliveTime, // 非核心线程的空闲时间
TimeUnit.MILLISECONDS, // 空闲时间单位
new LinkedBlockingQueue<Runnable>(), // 任务队列
new CustomRejectedExecutionHandler() // 自定义拒绝策略
);
```
在自定义的`rejectedExecution`方法中,你可以根据需要对被拒绝的任务进行不同的处理,例如记录日志、抛出异常等。
自定义线程池拒绝策略
自定义线程池的拒绝策略可以通过重写ThreadPoolExecutor类的RejectedExecutionHandler接口来实现。当线程池无法接受新的任务时,会调用拒绝策略来处理。下面是常见的几种自定义线程池的拒绝策略:
1. ThreadPoolExecutor.AbortPolicy(默认策略): 当线程池无法接受新的任务时,会抛出RejectedExecutionException异常,阻止任务的提交。
2. ThreadPoolExecutor.CallerRunsPolicy: 当线程池无法接受新的任务时,会将任务返回给调用者执行。这意味着提交任务的线程会执行该任务。
3. ThreadPoolExecutor.DiscardPolicy: 当线程池无法接受新的任务时,会默默地丢弃该任务,不会有任何提示或处理。
4. ThreadPoolExecutor.DiscardOldestPolicy: 当线程池无法接受新的任务时,会丢弃最旧的未执行任务,并尝试再次提交当前任务。
你可以根据自己的需求来选择适合的拒绝策略。例如,如果对任务的重要性很高,你可能希望使用CallerRunsPolicy,以确保任务一定会被执行。如果对任务的及时性要求不高,可以使用DiscardPolicy来节省系统资源。
请根据你的具体场景选择适合的拒绝策略来配置自定义线程池。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
#### 引用[.reference_title]
- *1* *2* *3* [自定义线程池拒绝策略](https://blog.csdn.net/weixin_44777693/article/details/104569711)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"]
[ .reference_list ]
相关推荐
![doc](https://img-home.csdnimg.cn/images/20210720083327.png)
![md](https://img-home.csdnimg.cn/images/20210720083646.png)
![doc](https://img-home.csdnimg.cn/images/20210720083327.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)