`
ahua186186
  • 浏览: 555339 次
  • 性别: 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 是最好的策略
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics