线程池拒绝策略 calls
时间: 2023-08-17 16:06:43 浏览: 161
Java 线程池 8 大拒绝策略,面试必问!.docx
线程池的拒绝策略是用来处理当线程池无法接受新任务时的情况。在引用\[2\]中提到了四种默认的拒绝策略:AbortPolicy、CallerRunsPolicy、DiscardPolicy和DiscardOldestPolicy。
- AbortPolicy是线程池的默认拒绝策略,它会抛出一个RejectedExecutionException异常,中止任务的执行。这种策略需要处理抛出的异常,否则会影响后续任务的执行。
- CallerRunsPolicy会使用调用线程来执行被拒绝的任务。当线程池和队列都满了,新进来的任务会让调用者自己执行。这种策略适用于并发较小、性能要求不高、不允许失败的情况。但是,如果任务提交速度过快,可能会导致程序阻塞,性能效率上会有损失。
- DiscardPolicy会直接丢弃被拒绝的任务,没有任何处理。
- DiscardOldestPolicy会丢弃阻塞队列中最老的任务,并将新任务加入。这种策略适用于希望保留最新任务而丢弃旧任务的情况。
关于问题中的CallerRunsPolicy,当线程池和队列都满了,新进来的一个任务也让调用者自己执行了。对于后续的任务,如果线程池和队列仍然满了,它们会被拒绝并根据所选择的拒绝策略进行处理。因此,如果caller线程在忙,后续的任务可能会被拒绝或者根据拒绝策略进行处理。
#### 引用[.reference_title]
- *1* [Java线程池使用与原理解析2(自定义线程池、合适的线程数量、线程池阻塞队列、线程拒绝策略)](https://blog.csdn.net/u012882823/article/details/129216675)[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^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item]
- *2* [Java线程池](https://blog.csdn.net/Chang_Yafei/article/details/126676068)[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^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item]
- *3* [Java线程池简述及使用](https://blog.csdn.net/A1318066232/article/details/121582452)[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^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item]
[ .reference_list ]
阅读全文