线程池中核心线程数与最大线程数与缓冲任务队列的关系?

在Java中的线程池(如ThreadPoolExecutor)中,核心线程数(corePoolSize)、最大线程数(maximumPoolSize)以及缓冲队列(workQueue)之间存在着密切的关系,它们共同决定了线程池如何管理和调度任务。以下是它们之间的关系概述:

  1. 核心线程数 (corePoolSize)

  2. 核心线程是线程池中最基础的线程数,即使在没有任务执行时,也会一直存活在线程池中。

  3. 当提交新任务时,线程池首先尝试创建或保持至多corePoolSize个线程来处理任务(长工)。

  4. 最大线程数 (maximumPoolSize)

  5. 当核心线程数全部处于活动状态且仍有新任务提交时,线程池将创建额外的线程(临时工),直至线程总数达到maximumPoolSize。

  6. 当线程数达到maximumPoolSize时,线程池不会再创建新的线程,除非现有线程中有线程终止。

  7. 缓冲队列 (workQueue)

  8. 只要有任务,新提交的任务会被放入缓冲队列中等待执行,当有长工不忙的时候,长工领任务执行.

  9. 当所有核心线程都在忙,并且缓冲队列尚未满时,新提交的任务也会被放入队列中排队(等待长工去执行)。

  10. 若队列已满(即有界队列的情况),并且线程数未达到maximumPoolSize,线程池会创建新的非核心线程(临时工)来执行任务。

  11. 当线程数已经达到maximumPoolSize,而缓冲队列也已经满了,这时线程池将依据预先设定的拒绝策略来处理无法接受的任务,例如丢弃任务、抛出异常或调用用户自定义的拒绝处理器。

综上所述,线程池的工作机制是这样的:

  • 先使用核心线程执行任务。

  • 当核心线程不足时,新任务入队列等待。

  • 当队列满且线程数未达最大值时,增加非核心线程执行任务。

  • 当队列满且线程数已达最大值时,触发拒绝策略处理新来的任务。

  • 7
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值