线程池执行流程详解,主要介绍其参数,以及执行过程中核心线程,队列,最大线程等的执行添加顺序,以及为什么这么做

发布时间:2024年01月15日

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

  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,就不会因为线程空闲而被终止。

为何要这样设计:

  • 核心线程:保证在有任务提交时,能够立即得到执行,提高响应速度。
  • 任务队列:当核心线程都在工作时,新任务可以在队列中等待,避免频繁地创建销毁线程带来的开销。
  • 最大线程:限制系统资源占用,防止因任务过多导致系统资源耗尽。
  • 拒绝策略:在极端情况下,提供一种应对机制,避免无限制地创建线程引发的问题。
文章来源:https://blog.csdn.net/weixin_43735471/article/details/135611473
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。