线程池执行流程、参数,以及执行过程中核心线程,队列,最大线程等的执行添加顺序,以及为什么这么做

线程池执行流程主要涉及到以下几个关键组件:核心线程数、任务队列、最大线程数以及拒绝策略等。以下是线程池的工作流程详解:

  1. 创建线程池:
    当我们创建一个线程池时,需要指定几个核心参数,如corePoolSize(核心线程数)、maximumPoolSize(最大线程数)、keepAliveTime(非核心线程空闲时间)、workQueue(任务队列)和RejectedExecutionHandler(拒绝策略)等。

  2. 提交任务:
    当调用execute(Runnable task)方法提交一个任务时,线程池会按照以下顺序处理:

    a. 首先检查线程池中当前运行的线程数是否小于corePoolSize,如果是,则创建一个新的工作线程来执行任务,即使其他工作线程是空闲的。

    b. 如果线程池中的线程数已经达到corePoolSize,则将新提交的任务放入workQueue(阻塞队列)中排队等待。

    c. 如果workQueue已满,且线程池中的线程数量仍小于maximumPoolSize,那么会继续创建新的线程来执行任务。

    d. 若线程池中的线程数量已经达到maximumPoolSize,同时workQueue也已满,无法再添加新任务时,将根据指定的RejectedExecutionHandler策略来处理该任务,例如抛出异常或者直接丢弃任务。

  3. 线程管理:
    当线程池中的线程数量超过corePoolSize时,如果某一线程空闲时间超过keepAliveTime,则会被终止,以减少资源消耗。但只要线程池中的线程数量大于等于corePoolSize,就不会因为线程空闲而被终止。

为何要这样设计:

  • 核心线程:保证在有任务提交时,能够立即得到执行,提高响应速度。
  • 任务队列:当核心线程都在工作时,新任务可以在队列中等待,避免频繁地创建销毁线程带来的开销。
  • 最大线程:限制系统资源占用,防止因任务过多导致系统资源耗尽。
  • 拒绝策略:在极端情况下,提供一种应对机制,避免无限制地创建线程引发的问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

见未见过的风景

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值