首页 > 试题广场 >

如何创建线程池?线程池常见参数有哪些?

[问答题]
如何创建线程池?线程池常见参数有哪些?
线程池可以有效的管理线程:管理线程数量、线程复用、 线程池的生命周期包含5个状态: RUNNING、SHUTDOWN、STOP、TIDING、TERMINATED。这5种状态的状态值分别是:-1、0、1、2、3。在线程池的生命周期中,它的状态只能由小到大迁移,是不可逆的。
发表于 2022-05-13 10:46:31 回复(1)
线程池:主要起到管理线程作用。线程池的好处:1.更方便管理线程2.可以减少因频繁创建线程和销毁线程带来的内存消耗,提高程序的运行效率。
发表于 2022-06-21 21:03:27 回复(0)
作用:
1.提高资源的重复利用
2.可以对资源进行有效管理
3.提高运行效率,不用等待线程创建

创建线程池七个要素:
1.核心线程数,
2.最大线程数,
3.等待队列,
4.空闲线程过期时间,
5.时间单位,
6.线程工厂,
7.饱和策略

工作流程:
1.当有请求过来,判断核心线程数是否已满,没有满,则创建线程.
2.如果没有满,判断等待队列是否已满,没有满则放入队列等待.
3.如果队列已满,判断最大线程数是否已满,没有满则会创建线程.
4.如果最大线程数已满,则会根据饱和策略来进行操作,线程池会销毁一部分线程,将线程数量收缩至核心线程数
发表于 2023-02-25 16:39:06 回复(1)
线程池可以有效的管理线程:1)它可以管理线程的数量,可以避免无节制的创建线程,导致超出系统负荷直至奔溃。2)它还可以让线程复用,可以大大地减少创建和销毁线程所带来的开销。线程池需要依赖一些参数来控制任务的执行流程,其中最重要的参数有:corePoolSize(核心线程池数)、workQueue(等待队列)、maxinumPoolSize(最大线程池数)、handler(拒绝策略)、keepAliveTime(空闲线程存活时间)。当我们想线程池提交一个任务之后,线程池按照如下步骤处理这个任务:1)判断线程数是否达到corePoolSize,若没有则新建线程执行该任务,否则进入下一步。2)判断等待队列是否已满,若没有则将任务放入等待队列,否则进入下一步。3)判断线程数是否达到maxinumPoolSize,如果没有则新建线程执行任务,否则进入下一步。4)采用初始化线程池时指定的拒绝策略,拒绝执行该任务。5)新建的线程处理完当前任务后,不会立即关闭,而是继续处理等待队列中的任务。如果线程的空闲时间达到了keepAliveTime,则线程池会销毁一部分线程,将线程数量收缩至corePoolSize。第2步中的列队可以有界也可以无界。若指定无界的队列,则线程池永远无法进入第3步,相当于废弃了maxinumPoolSize参数。这种用法是十分危险的,如果任务在队列中产生大量的堆积,就很容易造成内存泄露。JDK为我们提供了一个名为Executors的线程池的创建工具,该工具创建出来的就是带有无界队列的线程池,所以一般在工作中我们是不建议使用这个类来创建线程池的。
发表于 2022-07-23 18:29:22 回复(1)
作用:线程池是用来管理线程的: 1.提高线程复用率 2.管理线程 3.提高运行效率,不用等待线程创建 核心参数(七个)、处理流程、拒绝策略 核心参数:corePoolSize(核心线程数目):池中保留的最多线程数 maximumPoolSize(最大线程数目):核心线程数目+救急线程的最大数目 keepAliveTime(生存时间):救急线程的生存时间 ,生存时间内没有新任务,线程自动释放 unit(时间单位):救急线程生存时间的单位,可设置(秒、毫秒等等) workQueue(等待队列):没有空闲的核心线程时, 新来任务会到此队列排队,队列满会创建救急线程执行任务 threadFactory(线程工厂):可以定制线程对象的创建,例如设置线程名字,是否为守护线程等等 handler(拒绝策略):当所有线程繁忙,workqueue也已满时,会触发拒绝策略 处理流程:1.来了新任务,先判断核心线程数有没有满,即线程数是否达到corePoolSize,如果没有则创建线程; 2.如果核心线程已满,判断等待队列有没有满,没有的话将任务放入等待队列; 3.如果队列已满,判断救急线程有没有满,即线程数是否达到maximumPoolSize,没有则创建救急线程 4.如果已达到maximumPoolsize,则触发handler拒绝策略,线程池会根据选择的策略销毁一部分线程,将线程数控制在最大核心线程数 拒绝策略:1.直接抛出异常(默认)2.由调用者执行任务3.丢弃当前任务4.丢弃最早排队任务 拒绝策略也可以自己重写实现 线程的生命周期:RUNNING(运行状态)、SHUTDOWN(队列不请空,等待任务执行完毕)、STOP(清空队列,不等待任务执行)、TIDING(线程池和队列为空时进入)、TERMINATED(终止态,表示线程池已死亡),状态只能由小到大迁移,不可逆
发表于 2023-08-23 13:52:41 回复(3)
线程池便于创建和管理线程,可以避免不必要的线程创建和撤销的耗费,重用线程,提高程序的运行效率
发表于 2022-09-11 21:42:25 回复(1)
创建线程池的四种方法: newCachedThreadPool创建可缓存线程池 newFixedThreadPool创建定长线程池 newScheduledThreadPool创建定长线程池 newSingleThreadExecutor创建单线程化线程池。
发表于 2022-07-04 16:22:04 回复(0)
创建线程池可通过Java的ThreadPoolExecutor构造函数或Executors工具类实现。核心参数包括:核心线程数(维持常驻线程)、最大线程数(扩容上限)、存活时间(非核心线程空闲时长)、任务队列(存放待执行任务)、拒绝策略(队列满时的处理方式)。 1. 核心线程数:线程池长期保持的线程数量,即使线程处于空闲状态也不会销毁 2. 最大线程数:线程池允许创建的最大线程数量 3. 空闲线程存活时间:超过核心线程数的空闲线程(非核心线程)的存活时间 4. 任务队列:用于存放等待执行的任务的队列。当核心线程都在工作时,新任务会先进入队列等待,队列满了之后才会创建非核心线程。 5. 拒绝策略:当任务队列满且线程数达到最大线程数时,对新提交任务的处理策略。常见策略由:抛出异常,提交任务的线程自己执行任务,直接丢弃新任务,直接丢弃最旧的任务
发表于 2025-12-12 16:59:35 回复(0)
对于线程池而言,不同语言存在不同的创建方式,对于java来说使用ThreadPoolExecutor,对于C++则需要使用thread去自定义
而线程池的参数基本一致
1. 核心线程数:线程池长期保持的线程数量,即使线程处于空闲状态也不会销毁
2. 最大线程数:线程池允许创建的最大线程数量
3. 空闲线程存活时间:超过核心线程数的空闲线程(非核心线程)的存活时间
4. 任务队列:用于存放等待执行的任务的队列。当核心线程都在工作时,新任务会先进入队列等待,队列满了之后才会创建非核心线程。
5. 拒绝策略:当任务队列满且线程数达到最大线程数时,对新提交任务的处理策略。常见策略由:抛出异常,提交任务的线程自己执行任务,直接丢弃新任务,直接丢弃最旧的任务
发表于 2025-10-15 22:45:18 回复(0)
原先:线程池的出现是因为线程的多次创建并销毁涉及到了宝贵的内存资源。线程池分为四种,一是CachedThreadPool,没有核心线程,非核心线程数量为无限大,适合耗时少任务量大的情况。二是SecudleThreadPool,相较于CachedThreadPool有了核心线程,适合周期性任务;三是SingleThreadPool,只有一个线程,适合顺序任务;四是FixedThreadPool,核心线程数即为最大线程数,没有非核心线程。这几种的底层实现都是一样的,newThreadPoolExecutor() ;线程池的运行原理是:如果当前运行的线程少于corePoolSize,则创建新线程来执行任务(需要获取全局锁)-> 如果运行的线程等于或者多于corePoolSize,则将任务加入BlockingQueue等待->如果队列已满则创建新线程来处理任务(需要获取全局锁) -> 如果创建线程超过maximumPoolSize则任务将被拒绝。(corePoolSize是规定的核心线程数量,同理maximumPoolSize是线程池最多线程数量) 之后:添加: 线程池可以有效管理线程,管理线程数量、线程复用。线程池的生命周期包含5个状态:RUNNING 、SHUTDOWN、STOP、TIDYING、TERMINATED(SHUTDOWN是不再接收新任务,STOP变本加厉中断当前执行和放弃任务队列,TIDYING整理状态,线程池中的活动数量降为0,TERMINATED销毁),状态值分别为-1、0、1、2、3,只能由小都大迁移。
发表于 2024-05-31 11:29:17 回复(0)
线程池就是事先将多个线程对象放入在一个容器中,当使用的时候就不用new线程而是直接去池中 拿线程即可,节省了开辟子线程的时间,提高代码的执行率。 Java是Executor框架实现的,其中 ExecutorService是线程池的主要接口它提供了各种方法来管理线程池的行为,列如 提交任务,关闭线程池。 为什么要使用线程池 1. 线程池的工作主要是控制运行的线程数量,处理过程中将任务放入队列,然后在线程创建后启动这些任务,如果线程数量超过了最大数量,超出数量线程排队等候,等其它线程执行完毕,再从队列中取出任务来执行。 2. 主要特点: 线程复用;控制最大并发数; 管理线程; 第一: 降低资源消耗。通过复用利用已创建的线程 降低和销毁造成的消耗; 第二: 提高响应速度。当任务到达时, 任务可以不需要等到线程创建就能立即执行。 第三: 提高线程的可管理性。线程是稀缺资源,如果无限制使用的创建,不仅消耗系统资源,还会降低系统的稳定性,使用线程池可以进行 统一分配,调优和监控。 线程池底层工作原理 线程池是用来管理和重用的线程,来提高程序的性能和资源的利用。 底层: 1. 线程池的创建:在应用程序启动时,线程池会被创建并初始化,这涉及到确定池的大小,以及其他配置参数,列如最大线程数,线程空闲时间。 2. 任务提交:当应用程序有任务需要执行时,它们会被提交给线程池,这些任务可以实现Runnable或callable接口的线程执行任务,线程池接受任务后会根据配置来决定如何处理它们。 3. 任务队列:线程池通常会维护一个任务队列,用于存储待执行的线程任务,当有任务提交时,线程会将其放入任务队列中。 4. 线程调度:线程池中的线程会从任务队列中获取任务并执行,线程池会监视任务队列的状态,并在有任务可执行时 会选择合适的线程来执行任务,这样可以避免频繁的创建和销毁线程,提高系统性能。 5. 线程池的生命周期管理: 线程池通常具有生命周期,包括启动,运行和关闭,在应用程序关闭时 线程池会被正确的关闭,然后释放资源并确保所有的任务都得到了执行或取消。
发表于 2024-03-13 17:41:08 回复(0)
线程池可以有效的管理线程:管理线程的数量,线程的复用。线程池的生命周期为:RUNNING SHUTDOWM STOP TIDING TERMINATED 线程池可以减少因频繁创建线程和销毁线程带来的内存消耗,提高程序运行效率
发表于 2023-02-25 16:53:10 回复(0)
线程池可以通过new ThreadPoolExecutor()进行创建,常见参数有核心线程数,最大线程数,空闲线程存活时间,时间单位,线程工厂,拒绝策略,任务队列
发表于 2025-12-09 19:02:09 回复(0)
Java里面使用ThreadPoolExecutor 或者 Executor 进行创建。生产环境建议使用ThreadPoolExecutor,设置参数的范围更加灵活,可以适配不同的开发场景。线程池常见参数有 corePoolSize, maxPoolSize, threadPoolFactory, 线程存活时间。
发表于 2025-12-09 13:58:50 回复(0)
ThreadPoolExecutor 核心线程数:线程池最小线程数,除非指定了核心线程存活时间,否则即使没有任务处理,核心线程也不会销毁; 最大线程数:当核心线程在处理任务,且工作队列满了,又有新的任务加入,则会新建线程处理,新建线程数受最大线程数限制; 线程空闲存活时间:线程数超出核心线程数时,线程空闲时间超过指定的时间后,会被销毁; 线程空闲存活时间单位:线程空闲存活时间的单位; 工作队列:缓存任务的数据结构; 线程工厂:创建线程的工厂; 拒绝策略:线程池已满时的处理策略。 https://www.cnblogs.com/Higurashi-kagome/p/18014128
发表于 2025-11-26 20:35:02 回复(0)
线程池的作用是用来管理线程的 可以控制线程的数量 不会无限制的创建线程直到达到系统最大限度 提高线程的复用率 大大减少了线程创建和销毁的开销 不用等待线程创建 提高效率 七个参数:corePollsize:核心线程数(池中的最大线程数) maximumPollsize:最大线程数(核心线程数+救急线程数) keepAliveTime:生存时间(救急线程的生存时间 在生存时间内没有新任务,救急线程自动释放) unit:时间单位(救急线程的生存时间的单位(秒,毫秒等等)) workQueue:等待队列(没有空闲的核心线程时 新来的任务会到此队列 队列满时会创建救急队列执行任务) threadFactory:线程工厂(可以创建定制的线程 比如设置线程的名字、是否为守护线程等) handler:拒绝策略(当所有线程繁忙 workQueue也满时 会触发拒绝策略)
发表于 2025-11-25 15:58:16 回复(0)
Java中可以通过Executors工具类快速创建线程池适合简单场景,复杂场景推荐用 ThreadPoolExecutor 手动配置,常见参数:一 corePoolSize核心线程数量,默认情况下当线程中线程数量<=核心线程数量的时候,里面线程空闲时间就算超过了keepAliveTime也不会被销毁,二maximumPoolSize即为最大线程数量,三 keepAliveTime 生存时间,当线程池中线程数量超过核心线程数量,并且一个线程空闲时间超过keepAliveTime 就会被销毁,四unit是keepAliveTime时间的单位,五:workQueue:工作队列,当没有空闲线程来执行新任务的时候,该任务就会被放入到工作队列,等待被执行,六:threadFactory:线程工厂,可以给线程取名字,七:handler:拒绝策略:当一个新任务来的时候若有空闲线程,直接执行,若没有空闲的线程,被放入工作队列等待执行,若队列满了,线程池中线程数量若小于最大线程数量,会创建一个新线程去执行队列头部的任务,将新任务入队列,若线程池数量等于最大线程数量则直接去执行拒绝策略。
发表于 2025-11-14 14:47:36 回复(0)
线程池用来管理线程,好处是避免频繁创建和销毁线程,一次开好n个,在需要时进行调度。线程池参数主要需要指定线程的数量。数量一般和cpu核数有关。
发表于 2025-11-12 15:43:31 回复(0)
通过ThreadPoolExecutor的构造函数创建 参数有核心线程数 最大线程数 空闲时间 单位 消息队列 线程工厂 拒绝策略 任务执行过程 假如10个任务 长度为5的有界队列 先由核心线程数 1 2执行 剩下 3 4 5 6 7 放入队列 新提交的任务8 9 10 队列满 创建新线程3 4 5 去执行 剩下的由线程交叉执行
发表于 2025-11-12 15:42:57 回复(0)
创建线程池:直接使用Executors 或者使用TheardPoolExecutor 可扩展长度,线程池参数有 最小核心线程数,最大线程数,时间单位,任务队列,拒绝策略,I/O密集型 设置长度为cpu*2 CPU密集型长度为CPU长度
发表于 2025-11-11 13:54:38 回复(0)