`
ahua186186
  • 浏览: 561928 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

线程池拒绝策略分析

 
阅读更多
(1)AbortPolicy:

java.util.concurrent.RejectedExecutionException (触发条件:线程数=maximumPoolSize 且 queue已满),后果:线程池终止  --非常严重,证明需要流量控制了,或者资源容量需要扩容了


(2)DiscardPolicy :策略会悄悄抛弃新提交的任务 (触发条件:线程数=maximumPoolSize 且 queue已满),后果:丢弃新任务数据


(3)DiscardOldestPolicy :抛弃旧的线程  (触发条件:线程数=maximumPoolSize 且 queue已满),后果:丢弃旧任务数据

(4)CallerRunsPolicy :即不用线程池中的线程执行,而是交给调用方来执行 (触发条件:线程数=maximumPoolSize 且 queue已满),后果:超出容量评估的流量会交给调用方慢慢的执行

我个人喜好用CallerRunsPolicy ,至少能保证系统基本可用(但是可能会拖垮CPU和JVM, CPU一般都有预警,所以高峰期的核心目标还是控制流量),当然如果你的流量数据是允许丢失的,用DiscardOldestPolicy ,DiscardPolicy 是最好的策略
分享到:
评论

相关推荐

    concurrent线程池的实现技术分析

    【线程池与并发技术分析】 线程池是Java中多线程编程的重要工具,它通过预先创建并管理一组线程来提升系统性能,避免频繁地创建和销毁线程带来的开销。Java的并发库(java.util.concurrent)提供了丰富的线程池实现...

    Java 线程池框架核心代码分析1

    线程池的拒绝策略会在线程池和队列都无法接受新任务时被触发,不同的拒绝策略会有不同的处理方式,比如直接抛出异常、由调用者执行任务或忽略任务。 总结,Java线程池通过`ThreadPoolExecutor`提供了一种高效管理...

    线程池ThreadPoolExecutor原理源码分析.md

    - 如果放入任务失败或线程池状态发生变化(如变为 `SHUTDOWN`),则采取拒绝策略处理任务。 4. **创建非核心线程**: - 如果任务队列已满或者线程池状态不允许放入新任务,尝试创建非核心线程来立即处理新任务。 ...

    线程池源码

    在`TheadPoolTest1`这个测试文件中,可能包含了对线程池的初始化、任务提交、执行流程跟踪以及各种场景下的测试,比如不同负载情况下的性能比较、拒绝策略的验证等。通过分析这个源码,我们可以深入理解线程池的运作...

    java线程池实例详细讲解

    4. **拒绝策略(Rejection Handler)**:当工作队列已满且线程池中的线程数量已达最大值时,新提交的任务将被拒绝。Java提供了四种预定义的拒绝策略,如抛出异常、忽略任务、调用系统关机钩子或自定义策略。 5. **...

    JAVA线程池的分析和使用

    JAVA线程池是一种高效管理线程的技术,它允许开发者预设线程数量,避免无限制地创建和销毁线程带来的开销。...通过合理配置线程池参数,结合业务场景选择合适的阻塞队列和饱和策略,可以实现高性能的并发处理。

    线程池管理多线程上传

    - **关闭线程池**:调用`shutdown()`或`shutdownNow()`方法,停止接收新任务,正在执行的任务会继续完成,已提交但未执行的任务处理取决于拒绝策略。 3. **多线程上传的应用**: - **文件拆分**:大文件在上传前...

    spring 线程池

    Spring中的ThreadPoolTaskExecutor是核心组件,它允许我们定制线程池的具体配置,如核心线程数、最大线程数、线程存活时间、线程工厂、拒绝策略等。以下是一些关键配置参数: 1. **corePoolSize**:线程池的基本...

    线程池demo

    4. 异常处理和拒绝策略:可能会展示如何处理线程池在任务过多时的拒绝策略。 5. 示例代码可能还包括日志打印,以便于调试和分析线程池的工作状态。 理解并熟练运用线程池对于提高Android应用的性能和稳定性至关重要...

    java线程池概念.txt

    3:对线程池的基本使用及其部分源码的分析(注意:这里的源码分析是基于jdk1.6;) a:线程池的状态 volatile int runState; static final int RUNNING = 0; 运行状态 static final int SHUTDOWN = 1; 关闭状态;...

    android中线程池dmeo

    - `handler`:拒绝策略,当线程池和队列都满时,如何处理新提交的任务。 2. **线程池的执行流程**: - 当任务提交到线程池时,如果当前线程数小于核心线程数,会创建新的线程执行任务。 - 如果当前线程数等于...

    聊聊并发(3)Java线程池的分析和使用Java开发Jav

    6. **handler**:拒绝策略,当线程池和工作队列都满时,用于处理新提交的任务。 在实际开发中,我们可以根据应用场景选择合适的线程池实现。例如,`Executors`类提供了几个预设的线程池构造方法,如`...

    binder线程池demo

    线程池通常包含工作队列、工作线程、线程工厂和拒绝策略等核心组件。 3. **Android中的线程池**:在Android中,我们可以使用Java的`ExecutorService`和`ThreadPoolExecutor`来创建线程池。`ExecutorService`是...

    一个完整的线程池的实例

    - **拒绝策略**:当线程池达到最大容量时,如何处理新任务。 ### Java中线程池的工作原理 Java中使用`ExecutorService`接口和它的实现类来管理线程池。下面详细介绍这个简单的线程池实现的主要逻辑: #### 类结构...

    线程池实例(Linux)

    9. **线程池的监控与调优**:实时监控线程池的状态,如当前线程数、队列长度、拒绝任务数量等,以便进行性能调优。 10. **异常处理**:线程池需要处理任务执行过程中的异常,例如通过设置异常处理器,确保线程池在...

    使用线程池ThreadPoolExecutor 抓取论坛帖子列表

    4. 当线程数达到最大值且任务队列已满,新提交的任务会被拒绝,此时可以设置一个`RejectedExecutionHandler`来处理这种情况,例如丢弃任务或抛出异常。 在实际应用中,我们可能还需要关注线程池的监控和调优,例如...

    ClickHouse线程池对接Druid.zip

    通常,我们会设置核心线程数、最大线程数、队列长度和拒绝策略等参数。 5. **性能优化**: 结合Druid的监控数据,我们可以分析SQL执行效率,优化查询语句,减少全表扫描,提升ClickHouse的查询性能。同时,根据...

    Java 线程池原理深入分析

    3. 考虑超时和拒绝策略,对于无法处理的任务,可以选择丢弃或记录日志。4. 监控线程池状态,及时调整参数,防止线程池过度消耗资源。总结Java线程池是Java多线程编程的重要工具,通过合理的配置和使用,可以有效地...

    java 手术任务(线程池)

    - **ThreadPoolExecutor**:它是`ExecutorService`的主要实现类,提供了丰富的参数来定制线程池的行为,如核心线程数、最大线程数、工作队列、拒绝策略等。 - **ScheduledThreadPoolExecutor**:除了基本功能外,...

    12-线程池ThreadPoolExecutor底层原理源码分析(下)-周瑜.pdf

    5. 如果以上条件均不满足,则采取拒绝策略处理任务。 ### 四、线程池线程运行执行任务源码解析 线程池中每个worker线程执行任务的过程主要包括以下几个方面: 1. 获取任务:从任务队列中获取待执行的任务。 2. ...

Global site tag (gtag.js) - Google Analytics