0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

线程池七大核心参数执行顺序

科技绿洲 来源:网络整理 作者:网络整理 2023-12-04 16:45 次阅读

线程池是一种用于管理和调度线程执行的技术,通过将任务分配到线程池中的线程进行处理,可以有效地控制并发线程的数量,提高系统的资源利用率和任务处理效率。在使用线程池之前,我们需要了解线程池的七大核心参数以及它们的执行顺序。

  1. corePoolSize(核心线程数):
    线程池中一直存活的线程数量。在线程池初始化或者任务提交后,线程池会首先创建corePoolSize个线程来执行任务,即使这些线程处于空闲状态。
  2. maximumPoolSize(最大线程数):
    线程池中允许存在的最大线程数量。如果队列中的任务数超过了maximumPoolSize,那么线程池会创建新的线程来处理该任务。可通过调整该参数来设定线程池的最大并发处理能力。
  3. keepAliveTime(线程空闲时间):
    在线程池中,超过corePoolSize数量的线程在空闲时间超过keepAliveTime后会被销毁,以减少资源的消耗。通常情况下,线程在空闲时间超过keepAliveTime后,会被销毁直到线程池中的线程数不超过corePoolSize。
  4. unit(线程空闲时间单位):
    keepAliveTime的时间单位。可以选择秒、毫秒、微秒等单位。
  5. workQueue(任务队列):
    线程池中用于存储任务的队列。当任务来临时,如果当前线程数小于corePoolSize,则会创建新的线程来执行任务;如果当前线程数大于等于corePoolSize,则会将任务加入到workQueue中。
  6. threadFactory(线程工厂):
    线程工厂用于创建线程,可以定制线程的一些属性,如线程名、优先级等。可以通过实现ThreadFactory接口来自定义线程工厂。
  7. handler(饱和策略):
    当线程池中的线程数达到maximumPoolSize并且任务队列已满时,需要采取一种策略来处理新提交的任务。常见的饱和策略有:AbortPolicy(抛出RejectedExecutionException异常)、CallerRunsPolicy(由提交任务的线程来执行该任务)、DiscardOldestPolicy(丢弃队列中最旧的任务)和DiscardPolicy(直接丢弃新提交的任务)。

以上七个参数的执行顺序如下:
首先,当任务提交给线程池时,线程池会判断当前线程数是否小于核心线程数,如果小于则创建新线程执行任务;否则,将任务加入到任务队列中。

其次,在任务队列中,线程池会判断队列是否已满,如果已满则判断当前线程数是否小于最大线程数,如果小于则根据具体的饱和策略来决定是否创建新线程执行任务。

接着,如果任务队列未满或者线程池未达到最大线程数,则线程池会继续判断当前线程数是否小于核心线程数,如果小于则创建新线程执行任务;否则,将任务加入到任务队列中。

然后,在任务队列中的任务等待执行时,线程池会根据空闲时间判断是否销毁多余的线程,直到线程数不超过核心线程数。

最后,在线程池中如果没有可空闲的线程,并且任务队列已满,则根据具体的饱和策略来处理新提交的任务。

综上所述,线程池的核心参数在任务提交到线程池后的执行顺序是:核心线程数 -> 最大线程数 -> 线程空闲时间 -> 任务队列 -> 线程工厂 -> 饱和策略。了解线程池的核心参数及其执行顺序可以帮助我们更好地理解和使用线程池,提高程序的性能和可维护性。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 存储
    +关注

    关注

    13

    文章

    4244

    浏览量

    85619
  • 参数
    +关注

    关注

    11

    文章

    1769

    浏览量

    32058
  • 线程池
    +关注

    关注

    0

    文章

    57

    浏览量

    6830
收藏 人收藏

    评论

    相关推荐

    跨平台的线程组件--TP组件

    /销毁代价是很高的。那么我们要怎么去设计多线程编程呢???答案:对于长驻的线程,我们可以创建独立的线程执行。但是非长驻的线程,我们可以通过
    的头像 发表于 04-06 15:39 842次阅读

    Java中的线程包括哪些

    就可以分配一个线程执行。 ExecutorService:是 Executor 的子接口,提供了线程的一些生命周期方法。代表了一个线程
    的头像 发表于 10-11 15:33 779次阅读
    Java中的<b class='flag-5'>线程</b><b class='flag-5'>池</b>包括哪些

    买药秒送 JADE动态线程实践及原理浅析

    ,我们通过3轮高保真压测最终初步确定了线程核心参数。但我们仍面临一些保障系统稳定性问题:如何监控线程
    的头像 发表于 09-04 11:11 781次阅读
    买药秒送 JADE动态<b class='flag-5'>线程</b><b class='flag-5'>池</b>实践及原理浅析

    线程是如何实现的

    线程的概念是什么?线程是如何实现的?
    发表于 02-28 06:20

    java自带的线程方法

    、ThreadPoolExecutor结构 ThreadPoolExecutor的主要结构及继承关系如下图所示: 主要成员变量:任务队列存放那些暂时无法执行的任务;工作线程存放当前启用的所有
    发表于 09-27 11:06 0次下载

    基于Nacos的简单动态化线程实现

    本文以Nacos作为服务配置中心,以修改线程核心线程数、最大线程数为例,实现一个简单的动态化线程
    发表于 01-06 14:14 837次阅读

    Java线程核心原理

    看过Java线程源码的小伙伴都知道,在Java线程池中最核心的类就是ThreadPoolExecutor,
    的头像 发表于 04-21 10:24 823次阅读

    核心线程数和最大线程数区别

    达到最大线程数。当任务执行完毕后,线程会根据线程参数
    的头像 发表于 06-01 09:33 7553次阅读

    cpu核心数和线程数的关系

    核心线程数是线程池中一直存在的线程数,不会被回收。最大线程数是线程池中最多能够存在的
    的头像 发表于 06-01 17:41 9531次阅读

    线程的两个思考

    org.apache.tomcat.util.threads.TaskQueue org.apache.tomcat.util.threads.ThreadPoolExecutor 线程维护多个线程,等待监督管理者分配可并发
    的头像 发表于 09-30 11:21 3078次阅读
    <b class='flag-5'>线程</b><b class='flag-5'>池</b>的两个思考

    线程基本概念与原理

    一、线程基本概念与原理 1.1 线程概念及优势 C++线程简介
    的头像 发表于 11-10 10:24 474次阅读

    线程的基本概念

    线程的基本概念 不管线程是什么东西!但是我们必须知道线程被搞出来的目的就是:提高程序
    的头像 发表于 11-10 16:37 486次阅读
    <b class='flag-5'>线程</b><b class='flag-5'>池</b>的基本概念

    线程三大核心参数的含义 线程核心线程数制定策略

    以上考点作为线程面试几乎必问的内容,大部分人应该都是如数家珍,张口就来,但是懂了面试八股文真的就不一定在实际运用中真的就会把线程用好 。
    的头像 发表于 12-01 10:20 985次阅读
    <b class='flag-5'>线程</b><b class='flag-5'>池</b>三大<b class='flag-5'>核心</b><b class='flag-5'>参数</b>的含义 <b class='flag-5'>线程</b><b class='flag-5'>池</b><b class='flag-5'>核心</b><b class='flag-5'>线程</b>数制定策略

    线程的创建方式有几种

    的开销。线程的创建方式有多种,下面将详细介绍几种常用的线程创建方式。 手动创建线程 手动创
    的头像 发表于 12-04 16:52 810次阅读

    什么是动态线程?动态线程的简单实现思路

    因此,动态可监控线程一种针对以上痛点开发的线程管理工具。主要可实现功能有:提供对 Spring 应用内线程
    的头像 发表于 02-28 10:42 579次阅读