线程池的拒绝策略有哪些?这些拒绝策略有什么区别?使用表格的形式回答
时间: 2024-01-12 14:37:01 浏览: 68
| | AbortPolicy | CallerRunsPolicy | DiscardPolicy | DiscardOldestPolicy |
|----------|---------------------|---------------------|--------------------|---------------------|
| 描述 | 默认策略,直接抛出 RejectedExecutionException | 使用调用线程执行任务 | 直接丢弃新任务 | 丢弃队列中最旧的任务 |
| 作用 | 阻止系统过载 | 缓解系统压力 | 防止任务堆积 | 防止队列溢出 |
| 使用场景 | 对任务拒绝没有特殊要求 | 对任务执行时间较短的场景有效 | 对任务执行时间较长的场景有效 | 对任务数量较多的场景有效 |
| 返回值 | 抛出异常 | 不抛出异常,由调用线程执行任务 | 不抛出异常,不执行任务 | 不抛出异常,不执行任务 |
请注意,上述表格是常见的线程池拒绝策略,具体使用需要根据业务需求和系统状况来选择合适的策略。
相关问题
线程池的拒绝策略有哪些?
线程池的拒绝策略有以下四种:
1. AbortPolicy:直接抛出一个RejectedExecutionException异常。
2. DiscardPolicy:直接将任务丢弃,不做任何处理。
3. DiscardOldestPolicy:丢弃队列中最早添加的任务,然后重新尝试执行任务提交操作。
4. CallerRunsPolicy:由提交任务的线程来执行该任务。
Java中的线程池有哪些拒绝策略?
Java中的线程池有以下四种拒绝策略:
1. DiscardPolicy(丢弃策略):当线程池中的任务队列已满,且线程池中的线程数已经达到最大线程数时,新提交的任务将被直接丢弃,不会抛出异常也不会执行任务。
2. AbortPolicy(中止策略):当线程池中的任务队列已满,且线程池中的线程数已经达到最大线程数时,新提交的任务将抛出RejectedExecutionException异常。
3. CallerRunsPolicy(优先处理策略):当线程池中的任务队列已满,且线程池中的线程数已经达到最大线程数时,新提交的任务将由提交任务的线程来执行,即由调用execute方法的线程来执行该任务。
4. DiscardOldestPolicy(丢弃最老任务):当线程池中的任务队列已满,且线程池中的线程数已经达到最大线程数时,新提交的任务将会替换掉队列中最早的任务,然后再次尝试执行该任务。
阅读全文