线程池的拒绝策略七种
时间: 2023-11-14 09:00:41 浏览: 156
线程池的拒绝策略有以下七种:
1. AbortPolicy(默认策略):直接抛出异常,阻止系统正常运行。
2. CallerRunsPolicy:由调用线程处理该任务。
3. DiscardOldestPolicy:丢弃最早的任务,将新任务加入队列尝试再次提交。
4. DiscardPolicy:丢弃当前任务,不做任何处理。
5. ThreadPoolExecutor.CallerRunsPolicy:将任务回退给调用者,并尝试再次提交。
6. ThreadPoolExecutor.DiscardOldestPolicy:丢弃最早的任务,将新任务加入队列尝试再次提交。
7. ThreadPoolExecutor.DiscardPolicy:丢弃当前任务,不做任何处理。
相关问题
线程池拒绝策略 开发中常用什么策略_线程池有哪 4 种拒绝策略?
在开发中,常用的线程池拒绝策略包括:
1. AbortPolicy(默认):直接抛出RejectedExecutionException异常,阻止系统正常运行。
2. CallerRunsPolicy:只要线程池未关闭,该策略直接在调用者线程中,运行当前被丢弃的任务。显然这样做不会真的丢弃任务,但是,任务提交线程的性能极有可能急剧下降。
3. DiscardOldestPolicy:丢弃最老的一个请求任务,也就是即将被执行的一个任务,并尝试再次提交当前任务。
4. DiscardPolicy:直接丢弃任务,不予任何处理也不抛出异常。如果允许任务丢失,这是一种最好的方案。
线程池拒绝策略的选择需要根据具体的业务需求来进行选择,不能一概而论。
springboot 线程池拒绝策略
在 Spring Boot 中,你可以使用 ThreadPoolTaskExecutor 类来配置线程池,并且可以设置拒绝策略来处理任务队列满时的情况。
以下是一些常见的线程池拒绝策略:
1. AbortPolicy(默认):当任务队列已满时,新任务将被直接丢弃,并抛出 RejectedExecutionException 异常。
2. CallerRunsPolicy:当任务队列已满时,新任务会由调用线程(提交任务的线程)直接执行。这可能会降低整体的吞吐量,但可以避免任务丢失。
3. DiscardPolicy:当任务队列已满时,新任务将被直接丢弃,不会抛出任何异常。这种策略可能会导致未执行的任务较多。
4. DiscardOldestPolicy:当任务队列已满时,将尝试将最早的任务从队列中移除,然后再尝试添加新任务。如果移除成功,将会尝试再次提交当前任务。
你可以使用 ThreadPoolTaskExecutor 类的 setRejectedExecutionHandler() 方法来设置线程池的拒绝策略,例如:
```java
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
executor.setCorePoolSize(10);
executor.setMaxPoolSize(100);
executor.setQueueCapacity(1000);
executor.setRejectedExecutionHandler(new ThreadPoolExecutor.AbortPolicy());
executor.initialize();
```
在上面的示例中,我们使用了 AbortPolicy 拒绝策略。你可以根据实际需求选择适合的拒绝策略来处理任务队列满时的情况。
阅读全文