线程池高频面试题及参考答案.docxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多

线程池高频面试题及参考答案

一、基础原理类

什么是线程池?为什么要用线程池?

参考答案:线程池是管理一组可复用线程的容器,本质是“池化技术”的应用——提前创建一定数量的线程,任务到来时直接分配线程执行,任务结束后线程不销毁,放回池中等待下一个任务。

核心优势:①减少线程创建/销毁的开销(线程是重量级资源,频繁创建销毁会消耗CPU和内存);②控制并发数,避免线程过多导致的CPU上下文切换频繁、内存溢出问题;③统一管理线程,便于监控、调优和任务排队调度。

Java线程池的核心参数有哪些?请逐一说明作用

参考答案:Java中ThreadPoolExecutor的核心参数有5个,缺一不可:

核心线程数(corePoolSize):线程池长期维持的最小线程数,即使空闲也不会销毁(除非设置allowCoreThreadTimeOut);

最大线程数(maximumPoolSize):线程池能创建的最大线程数,当核心线程都在忙且任务队列满了,会创建临时线程,直到达到该数量;

空闲线程存活时间(keepAliveTime):临时线程(超过核心线程数的线程)空闲后的存活时长,超时会被销毁;

时间单位(unit):keepAliveTime的时间单位(如秒、毫秒);

任务队列(workQueue):存放等待执行的任务的队列,核心线程忙时,新任务会先入队,常见实现有ArrayBlockingQueue(有界)、LinkedBlockingQueue(无界)、SynchronousQueue(无缓冲)。

补充:还有两个常用参数——线程工厂(threadFactory)用于创建线程(可自定义线程名称、优先级)、拒绝策略(RejectedExecutionHandler)用于任务队列满且线程数达最大值时的处理逻辑。

线程池的执行流程是什么?(核心线程、队列、临时线程的协作逻辑)

参考答案:核心流程可总结为“先核心、再队列、最后临时线程”:

新任务提交时,若核心线程数未达上限,直接创建核心线程执行任务;

若核心线程已满,将任务加入任务队列等待;

若队列已满,且当前线程数未达最大线程数,创建临时线程执行任务;

若队列已满且线程数达最大值,触发拒绝策略。

举例:核心线程5,最大线程10,队列容量20——当提交26个任务时,5个核心线程+20个队列任务+1个临时线程(共26),提交第27个任务时触发拒绝。

二、实战应用类

Java中常见的线程池有哪些?(Executors工具类创建的)各自适用场景是什么?

参考答案:Executors提供了4种常用线程池,本质是ThreadPoolExecutor的封装:

FixedThreadPool(固定核心线程数):corePoolSize=maximumPoolSize,队列是无界LinkedBlockingQueue;适用场景:任务量稳定、需要控制并发数的场景(如服务器接收请求),缺点是队列无界可能导致OOM。

CachedThreadPool(缓存线程池):corePoolSize=0,maximumPoolSize=Integer.MAX_VALUE,队列是SynchronousQueue(无缓冲);适用场景:短期、高频、轻量级任务(如临时计算),优点是灵活复用线程,缺点是线程数无上限可能导致CPU耗尽。

SingleThreadExecutor(单线程池):corePoolSize=maximumPoolSize=1,无界队列;适用场景:需要任务顺序执行的场景(如日志写入、订单处理),保证任务执行的串行性。

ScheduledThreadPool(定时线程池):核心线程数固定,支持定时/周期性任务;适用场景:定时任务(如每隔1小时同步数据)、延迟任务(如延迟5秒执行回调)。

注意:阿里Java开发手册不推荐使用Executors创建线程池,因为FixedThreadPool和SingleThreadExecutor的无界队列可能导致OOM,CachedThreadPool和ScheduledThreadPool的最大线程数无上限可能导致资源耗尽,建议直接使用ThreadPoolExecutor自定义参数。

线程池的拒绝策略有哪些?各自的处理逻辑是什么?

参考答案:Java默认提供4种拒绝策略(实现RejectedExecutionHandler接口):

AbortPolicy(默认):直接抛出RejectedExecutionException异常,中断任务提交,适用于不允许任务丢失的场景(如金融交易);

CallerRunsPolicy:由提交任务的线程

文档评论(0)

151****9429 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档