线程池的处理流程和原理

作者: 爱吃豆腐面 | 来源:发表于2018-06-08 15:16 被阅读166次

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

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

    饱和策略:RejectedExecutionHandler

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

    • CallerRunsPolicy:用调用者所在的线程处理任务。此策略提供简单的反馈机制,能够减缓新任务的提交速度。
    • DiscardPolicy:不能执行任务,并将任务删除。
    • DiscardOldestPolicy:丢弃队列最近的任务,并执行当前的任务。

    相关文章

      网友评论

        本文标题:线程池的处理流程和原理

        本文链接:https://www.haomeiwen.com/subject/tpcasftx.html