lotus

贵有恒何必三更眠五更起 最无益只怕一日曝十日寒

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理
  1846 随笔 :: 0 文章 :: 109 评论 :: 288万 阅读

 

 

线程池中重要的配置

  • corePoolSize : 核心线程数量
  • workQueue : 等待队列
  • maximumPoolSize : 最大线程数量

提交任务时,判断的顺序为 corePoolSize --> workQueue -->maximumPoolSize

当线程数小于核心线程数时,创建核心线程

当线程大于等于核心线程数,且任务队列未满时,将任务放入队列

当线程数大于核心线程数,且任务队列已满时,检查最大线程数是否已满,若未满,创建非核心线程,若满,根据拒绝策略抛出异常拒绝任务。

 

拒绝策略—RejectedExecutionHandler

  • AbortPolicy : 直接抛出异常,这是默认策略
  • CallerRunsPolicy : 用调用者所在线程来执行任务
  • DiscardOldestPolicy : 丢弃阻塞队列中最靠前的任务,并执行当前任务
  • DiscardPolicy : 直接丢弃任务

 

遇到的坑!!!

  • 任务提交后长时间没有执行

   1.任务进入了队列,线程还在执行之前的任务。提交的任务还在排队等待执行中

  • 线程执行任务中无故消失

          1.  线程拒绝策略配置为CallerRunsPolicy、DiscardOldestPolicy、DiscardPolicy时 ,线程池满了不会抛出异常。建议将拒绝策略配置为AbortPolicy

          2.  一般情况下,代码只会去捕捉Exception,如果抛出Error(比如内存溢出)则会导致线程退出,而异常信息又没有拿到。最佳的解决办法是给线程池设置UncaughtExceptionHandler

 

 

参考地址

Java线程池使用的注意事项 https://www.jianshu.com/p/340f23001a65

 

欢迎关注微信公众号:shoshana

posted on   白露~  阅读(371)  评论(0编辑  收藏  举报
编辑推荐:
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
历史上的今天:
2018-11-24 电商-大中台+小前端
2018-11-24 新零售的舞台上,创业者如何与大象共舞
2018-11-24 无人零售的黑科技:RFID技术
点击右上角即可分享
微信分享提示