php中文网 | cnphp.com

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 568|回复: 0

【Java面试】简述一下你对线程池的理解?

[复制链接]

3150

主题

3160

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

UID
1
威望
0
积分
7976
贡献
0
注册时间
2021-4-14
最后登录
2024-11-24
在线时间
763 小时
QQ
发表于 2022-5-24 17:10:58 | 显示全部楼层 |阅读模式
到底是什么面试题,

让一个工作了4年的精神小伙,只是去参加了一场技术面试,

就被搞得精神萎靡。郁郁寡欢!

这一切的背后到底是道德的沦丧,还是人性的扭曲。

让我们一起揭秘一下这道面试题。

关于, “简述你对线程池的理解”,看看普通人和高手的回答。

普通人:#
嗯。。。。。。。。。。

高手:#
关于这个问题,我会从几个方面来回答。

首先,线程池本质上是一种池化技术,而池化技术是一种资源复用的思想,比较常见的有连接池、内存池、对象池。

而线程池里面复用的是线程资源,它的核心设计目标,我认为有两个:

减少线程的频繁创建和销毁带来的性能开销,因为线程创建会涉及到CPU上下文切换、内存分配等工作。

线程池本身会有参数来控制线程创建的数量,这样就可以避免无休止的创建线程带来的资源利用率过高的问题,

起到了资源保护的作用。

其次,我简单说一下线程池里面的线程复用技术。因为线程本身并不是一个受控的技术,也就是说线程的生命周期时由任务运行的状态决定的,无法人为控制。

所以为了实现线程的复用,线程池里面用到了阻塞队列,简单来说就是线程池里面的工作线程处于一直运行状态,它会从阻塞队列中去获取待执行的任务,一旦队列空了,那这个工作线程就会被阻塞,直到下次有新的任务进来。

也就是说,工作线程是根据任务的情况实现阻塞和唤醒,从而达到线程复用的目的。

最后,线程池里面的资源限制,是通过几个关键参数来控制的,分别是核心线程数、最大线程数。

核心线程数表示默认长期存在的工作线程,而最大线程数是根据任务的情况动态创建的线程,主要是提高阻塞队列中任务的

处理效率。
image.png





上一篇:SpringBoot实现基于token的登录验证
下一篇:linux系统下文件误删除该如何恢复?

相关帖子

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|php中文网 | cnphp.com ( 赣ICP备2021002321号-2 )

GMT+8, 2024-11-25 08:01 , Processed in 0.239263 second(s), 40 queries , Gzip On.

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2020, Tencent Cloud.

申明:本站所有资源皆搜集自网络,相关版权归版权持有人所有,如有侵权,请电邮(fiorkn@foxmail.com)告之,本站会尽快删除。

快速回复 返回顶部 返回列表