线程池上使用什么拒绝策略适合大数据
时间: 2024-01-12 16:13:53 浏览: 23
对于大数据场景下的线程池,可以考虑使用饱和策略作为拒绝策略。饱和策略中,当线程池的任务队列已满并且所有线程都在执行任务时,新提交的任务会被拒绝执行,并抛出异常或者进行其他处理。
在大数据场景下,任务的数量通常非常庞大,如果不采用饱和策略,可能会导致任务队列无限增长,最终耗尽系统资源。而采用饱和策略可以控制任务队列的长度,避免资源耗尽的情况发生。
常见的饱和策略包括:
1. AbortPolicy(默认):当任务被拒绝时,直接抛出RejectedExecutionException异常。
2. CallerRunsPolicy:当任务被拒绝时,由提交任务的线程来执行该任务。这样可以降低提交任务的速度,但可能会影响原始业务线程的性能。
3. DiscardPolicy:当任务被拒绝时,直接丢弃该任务,不做任何处理。
4. DiscardOldestPolicy:当任务被拒绝时,抛弃队列中最旧的任务,并尝试重新提交被拒绝的任务。
选择合适的饱和策略需要根据具体场景进行评估,考虑任务的重要性、系统的负载情况以及容忍丢失任务的程度。
相关问题
线程池的四种拒绝策略
线程池的四种拒绝策略分别是:
1. AbortPolicy(中止策略):当线程池无法接受新任务时,会抛出一个拒绝执行的异常信息(RejectedExecutionException),中止任务的执行,并需要处理该异常。这是线程池的默认拒绝策略。
2. CallerRunsPolicy(调用者运行策略):当线程池无法接受新任务时,会使用调用线程直接执行任务。适用于并发较小、性能要求不高的场景,不允许任务失败。然而,如果任务提交速度过快,可能会导致程序阻塞,造成性能上的损失。
3. DiscardPolicy(直接丢弃策略):当线程池无法接受新任务时,直接丢弃当前任务,没有任何提示信息或处理。适用于对任务丢失无关紧要的场景,但需要注意任务的丢失可能会带来潜在的问题。
4. DiscardOldestPolicy(丢弃最老任务策略):当线程池无法接受新任务时,丢弃阻塞队列中最老的一个任务,并将新任务加入队列。适用于对任务响应时间要求较高的场景,丢弃最老任务可以腾出空间来执行新任务。
根据具体的业务场景和需求,可以选择合适的拒绝策略来处理无法接受新任务的情况。一般情况下,使用线程池时,默认采用的是AbortPolicy中止策略。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
#### 引用[.reference_title]
- *1* *2* [线程池-四种拒绝策略总结](https://blog.csdn.net/alan_liuyue/article/details/120995601)[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: 50%"]
- *3* [Java线程池的四种拒绝策略](https://blog.csdn.net/a904364908/article/details/107489854)[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: 50%"]
[ .reference_list ]
线程池常用队列和拒绝策略
常用的线程池队列是workQueue,它对应的是阻塞队列。阻塞队列是一种在队列满或者空的情况下,能够阻塞线程的队列。通过使用阻塞队列,我们可以有效地控制任务的提交和执行,从而避免资源耗尽的风险。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
#### 引用[.reference_title]
- *1* *3* [并发编程之线程池(阻塞队列,拒绝策略,线程池种类)](https://blog.csdn.net/illovesoftware/article/details/116399312)[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: 50%"]
- *2* [线程池任务队列和拒绝策略](https://blog.csdn.net/u010277958/article/details/108620617)[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: 50%"]
[ .reference_list ]