浩哥笔记

我们的征途是星辰大海

  menu
40 文章
3364 浏览
4 当前访客
ღゝ◡╹)ノ❤️

线程池原理

首先线程池有几个核心的参数概念:

  1. 最大线程数maximumPoolSize
  2. 核心线程数corePoolSize
  3. 活跃时间keepAliveTime
  4. 阻塞队列workQueue
  5. 拒绝策略RejectedExecutionHandler

当提交一个新任务到线程池时,具体的执行流程如下:

  1. 当我们提交任务,线程池会根据corePoolSize大小创建若干任务数量线程执行任务

  2. 当任务的数量超过corePoolSize数量,后续的任务将会进入阻塞队列阻塞排队

  3. 当阻塞队列也满了之后,那么将会继续创建(maximumPoolSize-corePoolSize)个数量的线程来执
    行任务,如果任务处理完成,maximumPoolSize-corePoolSize额外创建的线程等待
    keepAliveTime之后被自动销毁

  4. 如果达到maximumPoolSize,阻塞队列还是满的状态,那么将根据不同的拒绝策略对应处理

    image.png

拒绝策略:

主要有4种拒绝策略:

  1. AbortPolicy:直接丢弃任务,抛出异常,这是默认策略
  2. CallerRunsPolicy:只用调用者所在的线程来处理任务
  3. DiscardOldestPolicy:丢弃等待队列中最旧的任务,并执行当前任务
  4. DiscardPolicy:直接丢弃任务,也不抛出异常

标题:线程池原理
作者:barryzpc
地址:https://myblog.zhengpc.com/articles/2024/04/26/1714120781404.html
说明:转载请注明出处
赞赏:如果对你有帮助,可略微支持一下
赞赏码