首页 > 试题广场 >

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

[问答题]
如何创建线程池?线程池常见参数有哪些?
线程池可以有效的管理线程:管理线程数量、线程复用、 线程池的生命周期包含5个状态: RUNNING、SHUTDOWN、STOP、TIDING、TERMINATED。这5种状态的状态值分别是:-1、0、1、2、3。在线程池的生命周期中,它的状态只能由小到大迁移,是不可逆的。
发表于 2022-05-13 10:46:31 回复(1)
作用:
1.提高资源的重复利用
2.可以对资源进行有效管理
3.提高运行效率,不用等待线程创建

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

工作流程:
1.当有请求过来,判断核心线程数是否已满,没有满,则创建线程.
2.如果没有满,判断等待队列是否已满,没有满则放入队列等待.
3.如果队列已满,判断最大线程数是否已满,没有满则会创建线程.
4.如果最大线程数已满,则会根据饱和策略来进行操作,线程池会销毁一部分线程,将线程数量收缩至核心线程数
发表于 2023-02-25 16:39:06 回复(1)
线程池:主要起到管理线程作用。线程池的好处:1.更方便管理线程2.可以减少因频繁创建线程和销毁线程带来的内存消耗,提高程序的运行效率。
发表于 2022-06-21 21:03:27 回复(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 回复(1)
创建线程池可通过Java的ThreadPoolExecutor构造函数或Executors工具类实现。核心参数包括:核心线程数(维持常驻线程)、最大线程数(扩容上限)、存活时间(非核心线程空闲时长)、任务队列(存放待执行任务)、拒绝策略(队列满时的处理方式)。 1. 核心线程数:线程池长期保持的线程数量,即使线程处于空闲状态也不会销毁 2. 最大线程数:线程池允许创建的最大线程数量 3. 空闲线程存活时间:超过核心线程数的空闲线程(非核心线程)的存活时间 4. 任务队列:用于存放等待执行的任务的队列。当核心线程都在工作时,新任务会先进入队列等待,队列满了之后才会创建非核心线程。 5. 拒绝策略:当任务队列满且线程数达到最大线程数时,对新提交任务的处理策略。常见策略由:抛出异常,提交任务的线程自己执行任务,直接丢弃新任务,直接丢弃最旧的任务
发表于 2025-12-12 16:59:35 回复(0)
目的:复用线程,提升性能,统一管理。 核心:ThreadPoolExecutor 的七大参数,必须了如指掌。 流程:先核心线程,再入队,再最大线程,最后拒绝。 实践:禁止使用 Executors,务必手动创建 ThreadPoolExecutor,并根据业务场景精细化配置参数。
发表于 2025-09-01 16:57:34 回复(0)
通过Executors工厂类内的addWorker方法创建worker对象,worker对象里面包含了线程和任务。因为线程池是堆线程的复用,worker对象里面有一个死循环处理任务。所以每次获取一个线程往死循环里面更换任务即达到线程复用的效果。常见参数有:最大线程数、核心线程数、任务队列,存活时间,拒绝策略
发表于 2026-02-14 17:59:04 回复(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 ThreadPoolExcutor() 具有以下参数 核心线程数、最大线程数、核心线程数外线程存活时间、任务队列、拒绝策略、线程创建工厂
发表于 2026-04-22 16:49:12 回复(0)
可以通过threadpoolexecutor构造函数或者是executor工具类实现,常用的参数有核心线程数、最大线程数、非核心线程存活时间、任务队列、拒绝策略等
发表于 2026-04-20 11:33:44 回复(0)
xzCDD
发表于 2026-04-04 21:17:18 回复(0)
最大线程数,核心线程数(最低有多少线程),线程存活时间可以指明时间单位,任务队列类型,拒绝策略。提交任务,线程池满就进入等待队列,队列满就判断是否超过最大核心线程数,如果超过就拒绝进入,此外就进入核心线程,进入等待队列。
发表于 2026-03-24 15:30:05 回复(0)
两种方式 第一种使用Executors工厂方法创建,但不太推荐,因为内部使用的队列或者线程数策略可能不受控,容易导致OOM或者线程数暴涨 第二种使用ThreadPoolExecutor手动创建,参数有 1. 核心线程数:标识线程池中长期保留的线程数量 2. 最大线程数:当前线程池允许创建的最大线程数,出现核心线程数都在使用,并且队列也满了的情况会在核心线程数之上扩建线程,最大线程数是上限 3. 空闲线程存活时间:非核心线程在空闲状态下能存活多久,超过时间会被销毁 4. 时间单位:空闲线程存活的时间单位 5. 任务阻塞队列:用于存放等待执行的任务(Array、Linked、Synchronous、Priority) 6. 线程工厂:用于创建线程,可以自定义线程名字、是否守护线程、优先级等 7. 拒绝策略:队列满并且线程达到最大线程数量时的处理策略(直接抛异常、提交的线程自己执行、直接丢弃不抛异常、丢弃任务队列中最老的任务,再尝试提交当前任务)
发表于 2026-03-23 11:23:49 回复(0)
通过创建ThreadPoolExecutor对象或者使用Executors工具类实现。 线程池七大参数: 1、核心线程数 2、最大线程数 3、任务队列 4、空闲线程存活时间 5、空闲时间单位 6、线程工厂 7、拒绝策略
发表于 2026-03-20 15:39:50 回复(0)