Java线程池提供的默认的拒绝策略有哪些
时间: 2023-10-17 09:05:20 浏览: 84
Java线程池提供了四种默认的拒绝策略,它们分别是:
1. AbortPolicy:默认的拒绝策略,抛出一个RejectedExecutionException异常,阻止系统正常运行。
2. CallerRunsPolicy:当队列满时,直接在调用execute方法的线程中运行被拒绝的任务。这种策略不会抛弃任务,但是可能会导致调用execute的线程被过度使用,影响系统的性能。
3. DiscardOldestPolicy:当队列满时,丢弃最早加入队列的任务,并尝试重新提交被拒绝的任务。这种策略能够保证不会抛出异常,但是可能会导致一些任务被丢弃,影响系统的功能。
4. DiscardPolicy:当队列满时,直接丢弃被拒绝的任务,不予任何处理。这种策略可以保证不会抛出异常,但是可能会导致一些重要任务被丢弃,影响系统的功能。
相关问题
线程池默认的拒绝策略
线程池的默认拒绝策略是指当线程池中的任务队列已满,并且所有工作线程都处于忙碌状态时,新任务如何处理的一种策略。在Java的Executor框架中,包括ThreadPoolExecutor这个核心类,有几种常见的拒绝策略:
1. **AbortPolicy**(默认策略):这是最简单的策略,当达到最大并发数并拒绝新任务时,会抛出RejectedExecutionException异常。这意味着程序需要捕获这个异常并采取适当的措施,比如限制请求速率或者回滚操作。
2. **CallerRunsPolicy**:在这种策略下,新来的任务不会加入到队列,而是直接由调用它的那个线程(通常主线程)去执行,可能会阻塞UI线程导致界面卡顿。
3. **DiscardOldestPolicy**:线程池会丢弃最早进入的任务,然后尝试再次提交新任务给空闲的工作线程。
4. **DiscardPolicy**:与 DiscardOldestPolicy 类似,但是它会简单地丢弃新来的任务,而不考虑任务的年龄。
开发者可以根据实际情况选择合适的拒绝策略,或者自定义拒绝策略。在设置ThreadPoolExecutor时,可以使用`ThreadPoolExecutor.setRejectedExecutionHandler(Runnable r)`方法来配置拒绝策略。
java线程池的拒绝策略
Java线程池提供了四种拒绝策略。默认的拒绝策略是拒绝任务并抛出异常,可以通过设置`RejectedExecutionHandler`参数来实现该策略。例如,可以使用`ThreadPoolExecutor.AbortPolicy()`来设置默认的拒绝策略。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
#### 引用[.reference_title]
- *1* *2* [Java 线程池四种拒绝策略](https://blog.csdn.net/qq_42700121/article/details/124442422)[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^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"]
- *3* [java线程池拒绝策略详解](https://blog.csdn.net/guangyingposuo/article/details/106253140)[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^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"]
[ .reference_list ]
阅读全文