Java中的线程池有哪些拒绝策略?
时间: 2024-01-12 16:20:40 浏览: 32
Java中的线程池有以下四种拒绝策略:
1. DiscardPolicy(丢弃策略):当线程池中的任务队列已满,且线程池中的线程数已经达到最大线程数时,新提交的任务将被直接丢弃,不会抛出异常也不会执行任务。
2. AbortPolicy(中止策略):当线程池中的任务队列已满,且线程池中的线程数已经达到最大线程数时,新提交的任务将抛出RejectedExecutionException异常。
3. CallerRunsPolicy(优先处理策略):当线程池中的任务队列已满,且线程池中的线程数已经达到最大线程数时,新提交的任务将由提交任务的线程来执行,即由调用execute方法的线程来执行该任务。
4. DiscardOldestPolicy(丢弃最老任务):当线程池中的任务队列已满,且线程池中的线程数已经达到最大线程数时,新提交的任务将会替换掉队列中最早的任务,然后再次尝试执行该任务。
相关问题
Java线程池的拒绝策略有哪些
Java线程池的拒绝策略有以下四种:
1. AbortPolicy:直接抛出RejectedExecutionException异常,阻止系统正常运行。
2. CallerRunsPolicy:只要线程池还没有关闭,该策略直接在调用者线程中执行当前任务,即同步执行任务。
3. DiscardPolicy:直接丢弃当前任务,什么也不做。
4. DiscardOldestPolicy:丢弃最早进入队列的任务,然后尝试重新提交当前任务。
Java 线程池的拒绝策略有哪几种
Java线程池的拒绝策略有以下四种:
1. AbortPolicy(默认策略):当线程池的任务队列已满且线程池中的线程数达到最大线程数时,新提交的任务将被直接拒绝,并抛出RejectedExecutionException异常。
2. CallerRunsPolicy:当线程池的任务队列已满且线程池中的线程数达到最大线程数时,新提交的任务会使用提交任务的线程来执行。这种策略通常被用于调整任务提交速度和任务执行速度之间的平衡。
3. DiscardPolicy:当线程池的任务队列已满且线程池中的线程数达到最大线程数时,新提交的任务将被直接丢弃,没有任何异常抛出。该策略会导致任务丢失。
4. DiscardOldestPolicy:当线程池的任务队列已满且线程池中的线程数达到最大线程数时,新提交的任务会先尝试与队列中最早的任务竞争执行权,如果竞争失败,则该任务会被丢弃,为新提交的任务腾出位置。
这些拒绝策略可以通过ThreadPoolExecutor类的构造方法中的rejectedExecutionHandler参数进行设置。不同的拒绝策略适用于不同的场景,开发者可以根据自己的需求选择合适的策略来处理线程池满载时的任务拒绝情况。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
#### 引用[.reference_title]
- *1* *2* *3* [Java 线程池 8 种拒绝策略](https://blog.csdn.net/z_ssyy/article/details/128470608)[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^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"]
[ .reference_list ]