线程池有哪些拒绝策略
时间: 2023-11-14 13:25:39 浏览: 63
线程池有几种拒绝策略,其中比较常见的有以下几种:
1. ThreadPoolExecutor.AbortPolicy(默认):如果线程池已经达到最大容量且工作队列已满,新提交的任务将会被丢弃并抛出RejectedExecutionException异常。
2. ThreadPoolExecutor.DiscardPolicy:如果线程池已经达到最大容量且工作队列已满,新提交的任务将会被丢弃,但不会抛出任何异常。
3. ThreadPoolExecutor.DiscardOldestPolicy:如果线程池已经达到最大容量且工作队列已满,新提交的任务将会与最早的任务竞争执行权,如果新任务获胜,则最早的任务将会被丢弃。
4. ThreadPoolExecutor.CallerRunsPolicy:如果线程池已经达到最大容量且工作队列已满,新提交的任务将会由提交任务的线程来执行。这种策略可以使提交任务的线程直接参与到任务的执行中,但是可能会导致调用线程的阻塞。
选择使用哪种拒绝策略取决于具体的业务需求和对任务丢失的容忍程度。例如,如果希望确保所有任务都能被执行,可以选择CallerRunsPolicy策略;如果对任务丢失不敏感,希望尽快抛出异常并停止提交新任务,可以选择AbortPolicy策略。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
#### 引用[.reference_title]
- *1* *2* *3* [四种线程池拒绝策略](https://blog.csdn.net/qq_41536778/article/details/114069180)[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_2"}}] [.reference_item style="max-width: 100%"]
[ .reference_list ]