线程池的拒绝策略有哪些
时间: 2023-03-25 20:02:54 浏览: 82
线程池的拒绝策略有四种:AbortPolicy、CallerRunsPolicy、DiscardPolicy、DiscardOldestPolicy。其中AbortPolicy是默认的拒绝策略,当线程池无法处理新的任务时,会抛出RejectedExecutionException异常;CallerRunsPolicy会将任务返回给调用者来执行;DiscardPolicy会直接丢弃无法处理的任务;DiscardOldestPolicy会丢弃队列中最早的任务,然后尝试重新提交当前任务。
相关问题
线程池有哪些拒绝策略
线程池有几种拒绝策略,其中比较常见的有以下几种:
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 ]
Java线程池的拒绝策略有哪些
Java线程池的拒绝策略有以下四种:
1. AbortPolicy:直接抛出RejectedExecutionException异常,阻止系统正常运行。
2. CallerRunsPolicy:只要线程池还没有关闭,该策略直接在调用者线程中执行当前任务,即同步执行任务。
3. DiscardPolicy:直接丢弃当前任务,什么也不做。
4. DiscardOldestPolicy:丢弃最早进入队列的任务,然后尝试重新提交当前任务。