线程池默认的拒绝策略是什么? CallerRunsPolicy拒绝策略的特点是什么? DiscardPolicy拒绝策略的特点是什么? 什么情况下适合使用DiscardOldestPolicy拒绝策略? 为什么建议关键业务使用AbortPolicy拒绝策略?
时间: 2024-06-14 17:06:39 浏览: 7
线程池默认的拒绝策略是CallerRunsPolicy。CallerRunsPolicy的特点是当任务不能再提交时,会将任务返回给调用者来执行,即由调用线程来执行该任务。
DiscardPolicy拒绝策略的特点是当任务不能再提交时,会直接丢弃该任务,不会抛出任何异常或错误信息。
适合使用DiscardOldestPolicy拒绝策略的情况是当任务不能再提交时,会丢弃最早提交的任务,然后尝试再次提交当前任务。
建议关键业务使用AbortPolicy拒绝策略的原因是当任务不能再提交时,会抛出RejectedExecutionException异常,及时反馈程序运行状态,以便及时发现系统不能承载更大并发量的情况。
相关问题
线程池设置拒绝策略的目的是什么?有哪些拒绝策略?
线程池设置拒绝策略的目的是在任务提交超过线程池处理能力时,对无法处理的任务进行处理,以防止系统资源耗尽或任务堆积引发问题。拒绝策略定义了线程池无法接受新任务时的处理方式。
以下是几种常见的拒绝策略:
1. AbortPolicy(默认):直接抛出RejectedExecutionException异常,阻止系统接受新任务。
2. CallerRunsPolicy:任务会由提交任务的线程来执行,即使线程池无法接收新任务,也不会抛弃任务。
3. DiscardPolicy:默默地丢弃无法处理的任务,不做任何处理。
4. DiscardOldestPolicy:丢弃最早提交但未被执行的任务,然后尝试再次提交新任务。
5. 自定义拒绝策略:可以实现RejectedExecutionHandler接口自定义拒绝策略,根据具体业务需求进行处理。
选择适当的拒绝策略取决于应用程序的具体需求和设计。例如,AbortPolicy适合在任务被拒绝时立即通知调用者并抛出异常的情况,而CallerRunsPolicy适合让调用者自己执行任务的情况,以减少可能的任务丢失。DiscardPolicy和DiscardOldestPolicy适用于对任务丢失不关心的情况。
通过设置合适的拒绝策略,可以更好地控制线程池的行为,避免任务堆积或系统资源耗尽的问题。
线程池的拒绝策略有哪些?这些拒绝策略有什么区别?使用表格的形式回答
| | AbortPolicy | CallerRunsPolicy | DiscardPolicy | DiscardOldestPolicy |
|----------|---------------------|---------------------|--------------------|---------------------|
| 描述 | 默认策略,直接抛出 RejectedExecutionException | 使用调用线程执行任务 | 直接丢弃新任务 | 丢弃队列中最旧的任务 |
| 作用 | 阻止系统过载 | 缓解系统压力 | 防止任务堆积 | 防止队列溢出 |
| 使用场景 | 对任务拒绝没有特殊要求 | 对任务执行时间较短的场景有效 | 对任务执行时间较长的场景有效 | 对任务数量较多的场景有效 |
| 返回值 | 抛出异常 | 不抛出异常,由调用线程执行任务 | 不抛出异常,不执行任务 | 不抛出异常,不执行任务 |
请注意,上述表格是常见的线程池拒绝策略,具体使用需要根据业务需求和系统状况来选择合适的策略。
相关推荐
![](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)