首页
题库
面试
求职
学习
竞赛
More+
所有博客
搜索面经/职位/试题/公司
搜索
我要招人
去企业版
登录 / 注册
首页
>
试题广场
>
说说你对线程池的理解
[问答题]
说说你对线程池的理解
添加笔记
求解答(0)
邀请回答
收藏(254)
分享
纠错
30个回答
添加回答
53
小凌子
线程池可以有效的管理线程:管理线程数量、线程复用、 线程池的生命周期包含5个状态: RUNNING、SHUTDOWN、STOP、TIDING、TERMINATED。这5种状态的状态值分别是:-1、0、1、2、3。在线程池的生命周期中,它的状态只能由小到大迁移,是不可逆的。
发表于 2022-05-13 10:46:31
回复(0)
31
牛客793464225号
线程池:主要起到管理线程作用。线程池的好处:1.更方便管理线程2.可以减少因频繁创建线程和销毁线程带来的内存消耗,提高程序的运行效率。
发表于 2022-06-21 21:03:27
回复(0)
14
自信的大白菜
作用:
1.提高资源的重复利用
2.可以对资源进行有效管理
3.提高运行效率,不用等待线程创建
创建线程池七个要素:
1.核心线程数,
2.最大线程数,
3.等待队列,
4.空闲线程过期时间,
5.时间单位,
6.线程工厂,
7.饱和策略
工作流程:
1.当有请求过来,判断核心线程数是否已满,没有满,则创建线程.
2.如果没有满,判断等待队列是否已满,没有满则放入队列等待.
3.如果队列已满,判断最大线程数是否已满,没有满则会创建线程.
4.如果最大线程数已满,则会根据饱和策略来进行操作,线程池会销毁一部分线程,将线程数量收缩至核心线程数
发表于 2023-02-25 16:39:06
回复(0)
13
别打小书包唉
线程池可以有效的管理线程: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)
3
神奇的打工人加油
作用:线程池是用来管理线程的: 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
回复(0)
3
哒哒哒嘿嘿
线程池便于创建和管理线程,可以避免不必要的线程创建和撤销的耗费,重用线程,提高程序的运行效率
发表于 2022-09-11 21:42:25
回复(0)
3
hrbu_王一衡
创建线程池的四种方法: newCachedThreadPool创建可缓存线程池 newFixedThreadPool创建定长线程池 newScheduledThreadPool创建定长线程池 newSingleThreadExecutor创建单线程化线程池。
发表于 2022-07-04 16:22:04
回复(0)
1
熬夜刷会题
线程池就是事先将多个线程对象放入在一个容器中,当使用的时候就不用new线程而是直接去池中 拿线程即可,节省了开辟子线程的时间,提高代码的执行率。 Java是Executor框架实现的,其中 ExecutorService是线程池的主要接口它提供了各种方法来管理线程池的行为,列如 提交任务,关闭线程池。 为什么要使用线程池 1. 线程池的工作主要是控制运行的线程数量,处理过程中将任务放入队列,然后在线程创建后启动这些任务,如果线程数量超过了最大数量,超出数量线程排队等候,等其它线程执行完毕,再从队列中取出任务来执行。 2. 主要特点: 线程复用;控制最大并发数; 管理线程; 第一: 降低资源消耗。通过复用利用已创建的线程 降低和销毁造成的消耗; 第二: 提高响应速度。当任务到达时, 任务可以不需要等到线程创建就能立即执行。 第三: 提高线程的可管理性。线程是稀缺资源,如果无限制使用的创建,不仅消耗系统资源,还会降低系统的稳定性,使用线程池可以进行 统一分配,调优和监控。 线程池底层工作原理 线程池是用来管理和重用的线程,来提高程序的性能和资源的利用。 底层: 1. 线程池的创建:在应用程序启动时,线程池会被创建并初始化,这涉及到确定池的大小,以及其他配置参数,列如最大线程数,线程空闲时间。 2. 任务提交:当应用程序有任务需要执行时,它们会被提交给线程池,这些任务可以实现Runnable或callable接口的线程执行任务,线程池接受任务后会根据配置来决定如何处理它们。 3. 任务队列:线程池通常会维护一个任务队列,用于存储待执行的线程任务,当有任务提交时,线程会将其放入任务队列中。 4. 线程调度:线程池中的线程会从任务队列中获取任务并执行,线程池会监视任务队列的状态,并在有任务可执行时 会选择合适的线程来执行任务,这样可以避免频繁的创建和销毁线程,提高系统性能。 5. 线程池的生命周期管理: 线程池通常具有生命周期,包括启动,运行和关闭,在应用程序关闭时 线程池会被正确的关闭,然后释放资源并确保所有的任务都得到了执行或取消。
发表于 2024-03-13 17:41:08
回复(0)
1
Cody.
线程池可以有效的管理线程:管理线程的数量,线程的复用。线程池的生命周期为:RUNNING SHUTDOWM STOP TIDING TERMINATED 线程池可以减少因频繁创建线程和销毁线程带来的内存消耗,提高程序运行效率
发表于 2023-02-25 16:53:10
回复(0)
0
牛客391980712号
线程池可以有效的管理线程,可以减少因为频繁创建线程和销毁线程带来的内存消耗,提高程序运行的效率。
编辑于 2024-04-23 20:20:59
回复(0)
0
佩奇大大
更方便管理线程。减少频繁创建线程带来的内存消耗,提高运行效率
发表于 2024-04-03 10:41:19
回复(0)
0
钟情于风TuT
线程池是一种池化的技术,可以很好的帮我们创建线程和复用线程,减少频繁创建线程和销毁线程带来的内存消耗,提高线程的利用率,它有七大参数分别为: 1. 核心线程数 2. 最大线程数 3. 临时线程存活时间 4. 临时线程的存活单位 5. 阻塞队列 (存放任务)6. 线程工厂(用于自定义我们所需要的线程 例如说线程的名称) 7.拒绝策略(在阻塞队列满的情况下应该使用哪种措施 1.直接抛出异常 2. 抛弃当前任务 3. 抛弃队首任务 4. 交给分配任务的线程来做)
编辑于 2024-04-01 17:54:28
回复(0)
0
Penalize
答: 线程池中主要起到管理线程和限制线程的作用。 它的好处是提高了线程的可复用性。 提高响应速度,任务不需要等线程创建就能立即执行。 提高线程的可管理性,统一分配、调优和监控。
发表于 2024-03-27 22:05:04
回复(0)
0
有礼貌的代码渣渣bbq了
编辑于 2024-03-06 16:22:30
回复(0)
0
牛客380258662号
线程池的作用:可以有效的管理线程,减少频繁的创建和销毁线索所带来的内存的开销,提高线程的运行效率 生命周期:Running(运行状态) Shutdown(等待队列,将任务执行完毕) Stop(清空队列,不等待任务的执行) Tiding(线程池和队列为空时进入) Terminated(终止状态,表示线程池已死亡) 线程池的七大要素: 核心线程数、最大线程数、空闲线程的存活时间、时间单位、拒绝策略、线程工厂、工作队列
编辑于 2024-02-29 09:22:32
回复(0)
0
中國移不動
线程创建和销毁开销: 创建和销毁线程是一项开销较大的操作,涉及到操作系统的调度和资源分配。频繁地创建和销毁线程会导致性能下降。线程池通过预先创建一组线程,这些线程在池中等待工作,避免了不必要的创建和销毁操作。 线程复用: 线程池中的线程可以被复用,它们可以接受新的任务并执行,然后返回池中等待下一个任务。这种线程复用减少了线程创建的开销,提高了系统的响应速度。 线程管理: 线程池提供了线程的生命周期管理,包括线程的创建、销毁、空闲线程的回收等。这使得线程的管理更加方便,开发者无需手动管理线程的生命周期。 任务队列: 线程池通常有一个任务队列,用于存储待执行的任务。当有新的任务提交给线程池时,线程池会将任务放入队列,并由池中的线程按照预定的策略来执行任务。 并发控制: 线程池可以限制同时执行的线程数量,从而控制并发度。这有助于防止资源竞争和过度消耗系统资源。 可配置性: 线程池通常提供了许多配置选项,如核心线程数、最大线程数、任务队列大小、线程超时时间等,允许开发者根据应用程序的需求进行调整和优化。 错误处理: 线程池可以提供一种机制来处理任务执行中的异常,通常通过异常处理器来实现,以防止异常终止整个线程。 应用场景: 线程池适用于需要并发处理任务的各种场景,如Web服务器处理请求、数据库连接池、文件下载和上传、计算密集型任务等。
发表于 2023-09-25 11:30:45
回复(0)
0
街头的流浪人
terminated
发表于 2023-09-21 10:04:55
回复(0)
0
深情的三文鱼在写面经
线程池创建之后 可以动态管理线程 因为线程创建销毁消耗内存和io消耗 所以需要一个类似池子的东西 养着这些线程 并管理这些线程 避免超出线程池最大范围 它还可以让线程复用 减少开销 拒绝策略
发表于 2023-08-16 15:45:48
回复(0)
0
jdasji
线程池的作用是用来管理线程,它可以管理线程创建的数量,避免线程无节制创建使得系统奔溃,同时它还能实现线程的复用,管理线程的声明周期,提高了资源的使用率和运行效率。线程核心参数有最大线程数maxcorePoolSize,maincorePoolSize核心线程数,workQueue等待队列,hander拒绝策略,keepAliveTime空闲线程存活时间。创建线程时线程池处理步骤:判断是否达到核心线程数,没有达到则创建线程,否则判断等待队列是否已满,如果没满则加入等待队列,如果等待队列也满了则判断线程数是否达到最大线程数,没有则新建线程任务,达到了则执行拒绝策略,den
发表于 2023-08-12 19:41:44
回复(0)
0
悲伤小老虎
优点:1,方便管理 2,节省资源 3,提高效率
发表于 2023-07-18 18:01:27
回复(0)
这道题你会答吗?花几分钟告诉大家答案吧!
提交观点
问题信息
Java
上传者:
real19931
难度:
30条回答
254收藏
1320浏览
热门推荐
相关试题
体育课测验(二)
广度优先搜索(BFS)
拓扑排序
dfs
评论
(2)
游戏内数据分析涉猎的少,如何证明自...
评论
(1)
之前的经历中单品数据分析的经验丰富...
评论
(1)
什么样的人适合做数据分析
评论
(1)
2022 诺瓦科技 Perl re...
perl
System Verilog
评论
(1)
扫描二维码,关注牛客网
意见反馈
下载牛客APP,随时随地刷题