线程池的拒绝策略是怎样的?
时间: 2024-01-12 13:41:20 浏览: 90
线程池在执行任务时,如果线程池已经满了,那么新的任务就需要进行一些处理,这个处理方式就是拒绝策略。
线程池的拒绝策略有以下几种:
1. CallerRunsPolicy:直接在调用者线程中运行被拒绝的任务。
2. AbortPolicy:直接抛出RejectedExecutionException异常。
3. DiscardPolicy:直接丢弃被拒绝的任务。
4. DiscardOldestPolicy:丢弃最早被放入线程池的任务,然后尝试重新提交被拒绝的任务。
其中,CallerRunsPolicy是最常用的一种拒绝策略,因为它可以保证任务一定会被执行,但是它也有可能会影响调用者线程的性能。其他的拒绝策略则需要根据实际情况来选择。
相关问题
线程池的拒绝策略有哪些?这些拒绝策略有什么区别?使用表格的形式回答
| | AbortPolicy | CallerRunsPolicy | DiscardPolicy | DiscardOldestPolicy |
|----------|---------------------|---------------------|--------------------|---------------------|
| 描述 | 默认策略,直接抛出 RejectedExecutionException | 使用调用线程执行任务 | 直接丢弃新任务 | 丢弃队列中最旧的任务 |
| 作用 | 阻止系统过载 | 缓解系统压力 | 防止任务堆积 | 防止队列溢出 |
| 使用场景 | 对任务拒绝没有特殊要求 | 对任务执行时间较短的场景有效 | 对任务执行时间较长的场景有效 | 对任务数量较多的场景有效 |
| 返回值 | 抛出异常 | 不抛出异常,由调用线程执行任务 | 不抛出异常,不执行任务 | 不抛出异常,不执行任务 |
请注意,上述表格是常见的线程池拒绝策略,具体使用需要根据业务需求和系统状况来选择合适的策略。
线程池的拒绝策略有哪些?
线程池的拒绝策略有以下四种:
1. AbortPolicy:直接抛出一个RejectedExecutionException异常。
2. DiscardPolicy:直接将任务丢弃,不做任何处理。
3. DiscardOldestPolicy:丢弃队列中最早添加的任务,然后重新尝试执行任务提交操作。
4. CallerRunsPolicy:由提交任务的线程来执行该任务。
阅读全文