线程池的处理流程和原理

线程池的处理流程主要分为3步

  • 提交任务后,线程池先判断线程数是否达到了核心线程数(corePoolSize)。如果未达到线程数,则创建核心线程处理任务;否则,就执行下一步;
  • 接着线程池判断任务队列是否满了。如果没满,则将任务添加到任务队列中;否则,执行下一步;
  • 接着因为任务队列满了,线程池就判断线程数是否达到了最大线程数。如果未达到,则创建非核心线程处理任务;否则,就执行饱和策略,默认会抛出RejectedExecutionException异常。
线程池的处理流程.png

饱和策略:RejectedExecutionHandler

当任务队列和线程池都满了时所采取的应对策略,默认是AbordPolicy,表示无法处理新任务,并抛出RejectedExecutionException异常。此外还有3种策略:

  • CallerRunsPolicy:用调用者所在的线程处理任务。此策略提供简单的反馈机制,能够减缓新任务的提交速度。
  • DiscardPolicy:不能执行任务,并将任务删除。
  • DiscardOldestPolicy:丢弃队列最近的任务,并执行当前的任务。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 为什么使用线程池 当我们在使用线程时,如果每次需要一个线程时都去创建一个线程,这样实现起来很简单,但是会有一个问题...
    闽越布衣阅读 4,357评论 10 45
  • 在我们的开发中“池”的概念并不罕见,有数据库连接池、线程池、对象池、常量池等等。下面我们主要针对线程池来一步一步揭...
    Java架构阅读 4,155评论 4 87
  • 阿福阿喜已经32月了,从他们在妈妈肚子里有了生命迹象到现在,我不在他们身边陪伴的日子,不超过3个月,穿衣喂...
    雷子kris阅读 1,014评论 0 6
  • 1, 通读bootstrap 文档2, 搞清楚tip流程
    邹小邹大厨阅读 178评论 0 0
  • 一、什么是婚礼经纪人 婚礼经纪人是婚秘精心甄选出的婚礼行业资深婚礼人,根据新人需求及预算提供全面的婚礼统筹、咨询服...
    婚秘阅读 499评论 0 1