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(直接丢弃新提交的任务)。

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

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

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

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

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

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

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

    关注

    12

    文章

    3856

    浏览量

    84660
  • 参数
    +关注

    关注

    11

    文章

    1398

    浏览量

    31471
  • 线程池
    +关注

    关注

    0

    文章

    53

    浏览量

    6768
收藏 人收藏

    评论

    相关推荐

    手工焊接的七大恶习

    习惯,特再增加两个视频:一个叫手工焊接技术,适合初学者,比较系统的从头讲解焊接的技术;另一个叫手工焊接的七大习,是我见过的最好的有关手工焊接的知识之一,只要你是DIYER都要看看,杜绝焊接的不良习惯
    发表于 01-12 17:54

    QC工具--QC七大手法

    QC工具--QC七大手法
    发表于 05-06 19:33

    IE工具--IE七大手法

    IE工具--IE七大手法
    发表于 05-06 19:36

    《提高测量精度的七大技巧》

    偶然间在其他网站上看到的《提高测量精度的七大技巧》资源包,觉得还不错,挺有用的,大家可以去看看!资源包将讨论提高测量精度的七大技巧,涉及传感器技术,隔离屏蔽技术,硬件指标考量,后端信号处理等
    发表于 08-05 18:00

    QC七大手法简介及应用

    《QC七大手法簡介及其應用》 METHOD1. 查檢表 METHOD2. 柏拉圖 METHOD3. 特性要因圖(魚骨圖) METHOD4. 直方圖 METHOD5. 管制圖 METHOD6. 散布圖 METHOD7. 層別法
    发表于 09-01 10:12

    java基础:Java七大外企经典面试精讲视频

    java基础:Java七大外企经典面试精讲视频对于很多应聘java程序员的求职者来说,全面掌握java面试技巧,确实是自己找到一个好工作的敲门砖。今天小编在这里给大家分享一个关于java
    发表于 06-29 15:00

    VS-RK3399超强七大性能优势

    RK3399芯片资料简介,RK3399硬件开发资料VS-RK3399超强七大性能优势
    发表于 02-05 07:55

    线程是如何实现的

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

    线程创建的两种方法

    任务后立即判断任务状态,显示四个任务都未完成。在延时2.5后,task1 和 task2 执行完毕,task3 仍在执行中。使用 result() 方法可以获取任务的返回值。2. 自定义线程
    发表于 03-16 16:15

    关于RT-Thread内存管理的内存简析

    :支持线程挂起。内存无空闲内存块时,申请线程会被挂起,直到有可用内存块。简单理解,就是将相同大小的内存块通过某种方式放在一起,就好比将各个内存块放在类似于水池的容器里,需要用的时候,就从这个池子里取
    发表于 04-06 17:02

    进程和线程定义

    线程是CPU调度的最小单位(程序执行流的最小单元),它被包含在进程之中,是进程中的实际运作单元。一条线程是进程中一个单一顺序的控制流,一个进程中可以并发多个
    的头像 发表于 11-20 10:23 2393次阅读

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

    达到最大线程数。当任务执行完毕后,线程池会根据线程参数来决定是否回收线程。 简单来说,
    的头像 发表于 06-01 09:33 6065次阅读

    cpu核心数和线程数的关系

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

    sql where条件的执行顺序

    SQL语句中的WHERE条件是用来筛选数据的,它决定了哪些数据会被返回给用户。WHERE条件的执行顺序是影响SQL语句性能的一个重要因素,正确地理解和优化WHERE条件的执行顺序可以提
    的头像 发表于 11-23 11:31 1021次阅读

    核心线程数和最大线程数怎么设置

    核心线程数和最大线程数是Java线程池中重要的参数,用来控制线程池中
    的头像 发表于 12-01 13:50 4082次阅读