线程池常见面试题总结

news2025/1/11 10:01:53

线程池的工作原理和实现已经在之前的文章中介绍 

本文主要总结面试中线程池常问题目。

1、有几种常见的线程池(必知必会)?

1)定长线程池(FixedThreadPool)
2)定时线程池(ScheduledThreadPool)
3)可缓存线程池(CachedThreadPool)
4)单线程化线程池(SingleThreadExecutor)

核心概念:这四个线程池的本质都是ThreadPoolExecutor对象(自己看源码)
不同点在于:
1)FixedThreadPool:只有核心线程,线程数量固定,执行完立即回收,任务队列为链表结构的有界队列。
2)ScheduledThreadPool:核心线程数量固定,非核心线程数量无限,执行完闲置 10ms 后回收,任务队列为延时阻塞队列。
3)CachedThreadPool:无核心线程,非核心线程数量无限,执行完闲置 60s 后回收,任务队列为不存储元素的阻塞队列。
4)SingleThreadExecutor:只有 1 个核心线程,无非核心线程,执行完立即回收,任务队列为链表结构的有界队列


2.线程池的主要参数有哪些

1)corePoolSize(必需):核心线程数。默认情况下,核心线程会一直存活,但是当将 allowCoreThreadTimeout 设置为 true 时,核心线程也会超时回收。
2)maximumPoolSize(必需):线程池所能容纳的最大线程数。当活跃线程数达到该数值后,后续的新任务将会阻塞。
3)keepAliveTime(必需):线程闲置超时时长。如果超过该时长,非核心线程就会被回收。如果将 allowCoreThreadTimeout 设置为 true 时,核心线程也会超时回收。
4)unit(必需):指定 keepAliveTime 参数的时间单位。常用的有:TimeUnit.MILLISECONDS(毫秒)、TimeUnit.SECONDS(秒)、TimeUnit.MINUTES(分)。
5)workQueue(必需):任务队列。通过线程池的 execute() 方法提交的 Runnable 对象将存储在该参数中。其采用阻塞队列实现。
6)threadFactory(可选):线程工厂。用于指定为线程池创建新线程的方式。
7)handler(可选):拒绝策略。当达到最大线程数时需要执行的饱和策略。

3.线程池的工作流程


这个问题回答的时候,最好用讲故事的方式进行。
假如核心线程数是5,最大线程数是10,阻塞队列也是10
1)有新任务来的时候,将先使用核心线程执行;
2)当任务数达到5个的时候,第6个任务开始排队;
3)当任务数达到15个的时候,第16个任务将开启新的线程执行,也就是第6个线程
4)当任务数达到20个的时候,线程池满了,如果有第21个任务,将执行拒绝策略(见下一个问题)
流程图:

 4、线程池的拒绝策略有哪些


1)AbortPolicy(默认):丢弃任务并抛出 RejectedExecutionException 异常。
2)CallerRunsPolicy:由调用线程处理该任务。
3)DiscardPolicy:丢弃任务,但是不抛出异常。可以配合这种模式进行自定义的处理方式。
4)DiscardOldestPolicy:丢弃队列最早的未处理任务,然后重新尝试执行任务。

5、如何合理设置线程池的核心线程数

 线程数量的计算公式一般都是 线程数=Ncpu(1+w/e).其中W代表的是阻塞耗时,e代表的是计算耗时。
1)IO密集型:如果存在IO,那么W/e肯定大于1,但是需要考虑系统内存上限(没开启一个线程都需要内存空间),这个需要服务器测试到底多少个线程比较合适(CPU占比,线程数、总耗时、内存耗时)。保守取值为1,及线程数=2Ncpu+1,
2)计算密集型:假设没有等待时间,则W=0,W/C=0,线程数= Ncpu+1. 其中多出来的一个是为了防止线程偶发的缺页中断。
服务性能I0优化有一个估算公式:
最佳线程数目=((线程等待时间+线程CPU时间)/线程CPU时间)X CPU数量
比如平均每个线程CPU运行时间为0.5s,而线程等待时间为1.5s(比如IO),CPU个数为8.则根据以上公式可以估算((1.5+0.5)/0.5)X 8=32
公式进一步转化:
最佳线程数目 = (线程等待时间/线程CPU时间+1)X 线程数



原文链接:https://blog.csdn.net/m0_37824308/article/details/123825244

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1128296.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

25.2 MySQL 运算符

1. 伪表 在MySQL中, DUAL是一个特殊的单行, 单列的虚拟表, 主要用于在SELECT语句中计算表达式或执行函数, 而不需要从实际的数据表中检索数据. 使用DUAL的原因主要有以下几点:* 1. 简化计算: 通过在SELECT语句中使用DUAL, 可以方便地计算表达式或执行函数, 而无需创建临时表或…

android点击全屏预览照片第三方库使用

android点击全屏预览照片第三方库使用-imgepreviewlibrary 移动端我们经常会遇到放大预览照片,如果是一张照片,那就全屏展示图片就好了,但是如果是一个列表,滑动查看,我们一般会借助viewpager进行实现,但是…

【鸿蒙软件开发】ArkTS通用事件

文章目录 前言一、点击事件1.1 基础介绍1.2 ClickEvent对象说明1.3 示例代码 二、触摸事件2.1 基础介绍2.2 ClickEvent对象说明2.3 示例代码 二、焦点事件2.2 基础介绍3.2 示例代码 总结 前言 在我们的ArkTS中有一些通用的事件,他们在所有的组件中都可以用&#xf…

号外!百度Comate代码助手全新上线SaaS服务 - 免费申请试用+深入教程解读!

🌷🍁 博主猫头虎 带您 Go to New World.✨🍁 🦄 博客首页——猫头虎的博客🎐 🐳《面试题大全专栏》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺 &a…

全国高清影像数据导出TIF有多大?

全国数据导出为TIF文件之后有多大呢? 我们今天来分析探讨一下这个问题。 01背景 最近,有用户提出在交付数据时,需要交付TIF格式的数据,但我们的地图是基于自研的DAT格式分块存储。 我们在《毫不费力,让内网多一个…

外汇天眼:假冒违法平台害人害己,监管“铁拳”打击!

近年来,金融市场上的假冒违法平台问题日益严重,给投资者和监管机构带来了巨大的挑战。对此,英国FCA、意大利CONSOB和塞浦路斯CySEC等监管机构纷纷出手,打击假冒违法平台,以保护投资者的权益,整肃整个外汇市…

利用Windows自有工具,校验md5值

使用winr&#xff0c;打开cmd命令行窗口 去到对应目录中 对指定目录下的iso进行校验 具体命令行命令为&#xff1a; certutil -hashfile <文件名> <hash类型> md5 SHA1 SHA256都是可以校验的&#xff0c;但我工作中经常校验md5值&#xff0c;就先用了。 很久不写…

中国人民大学与加拿大女王大学金融硕士:培养具有国际视野和专业素养的金融精英

在全球化的今天&#xff0c;金融行业的发展日新月异&#xff0c;对于专业人才的需求也日益增长。为了满足这一需求&#xff0c;中国人民大学与加拿大女王大学联手打造了一款全新的金融硕士项目&#xff0c;旨在培养具有国际视野和专业素养的金融精英。 2013年8月&#xff0c;由…

Spring高手之路15——掌握Spring事件监听器的内部逻辑与实现

文章目录 1. 事件的层次传播2. PayloadApplicationEvent的使用3. 为什么选择自定义事件&#xff1f;4. 事件广播原理4.1 Spring 5.x的事件模型概述4.2 发布事件publishEvent源码分析4.3 Spring事件广播&#xff1a;从ApplicationEventMulticaster开始4.4 Spring事件发布与处理流…

代码随想录 Day27 贪心02上 LeetCode T122 买卖股票的最佳时机 II

LeetCode T122 买卖股票的最佳时机II 题目链接:122. 买卖股票的最佳时机 II - 力扣&#xff08;LeetCode&#xff09; 题目思路: 这题的基本思路还是使用贪心算法,有人可能还在思考啥是贪心算法,这个算法就是你提出一个思想,且找不到明显的反例,这个思路就可以一试,这道题的局…

腾讯云2023年双11云服务器优惠价格表

腾讯云2023年双11大促优惠活动已经拉开序幕&#xff0c;腾讯云推出了一系列云服务器的优惠活动&#xff0c;下面给大家整理分享腾讯云双11云服务器优惠价格表&#xff0c;让大家轻松了解各种云服务器实例的折扣价格和配置信息。 一、腾讯云双十一活动入口 活动入口&#xff1a;…

分类预测 | MATLAB实现SSA-CNN-GRU麻雀算法优化卷积门控循环单元数据分类预测

分类预测 | MATLAB实现SSA-CNN-GRU麻雀算法优化卷积门控循环单元数据分类预测 目录 分类预测 | MATLAB实现SSA-CNN-GRU麻雀算法优化卷积门控循环单元数据分类预测分类效果基本描述程序设计参考资料 分类效果 基本描述 1.MATLAB实现SSA-CNN-GRU麻雀算法优化卷积门控循环单元数据…

墨西哥专线:国产商品迅速开拓墨西哥市场的基础

随着全球贸易的不断发展&#xff0c;越来越多的中国企业开始将目光投向海外市场。墨西哥作为北美洲的重要国家&#xff0c;拥有庞大的消费市场和广阔的发展空间&#xff0c;对于中国企业来说&#xff0c;无疑是一个极具潜力的市场。然而&#xff0c;如何让国产商品在这个市场上…

【Docker】Docker-Compose内置DNS负载均衡失效问题

Docker Compose实现负载均衡 还是对前面的例子docker-compose.yml稍微修改&#xff1a; version: "3.8"services:flask-demo:build:context: .dockerfile: Dockerfileimage: flask-demo:latestenvironment:- REDIS_HOSTredis-server- REDIS_PASS${REDIS_PASS}healt…

有没有PC端的配音软件推荐?(免下载)

配音软件还是电脑上使用最方便&#xff0c;而且电脑上可以使用的配音软件也非常多。只是你平时使用的不多&#xff0c;所有想用的时候才会找不到&#xff0c;对于经常使用配音软件的人来说&#xff0c;那真的太多了。今天给大家推荐一个免下载的配音网站&#xff0c;微信扫码即…

如何解决网站被攻击的问题?

在数字时代&#xff0c;网站安全问题日益突出&#xff0c;网络攻击的形式不断演进&#xff0c;因此&#xff0c;保护网站免受威胁至关重要。本文将探讨如何解决网站被攻击的问题&#xff0c;分析未来的网络攻击形式&#xff0c;并提供一些通俗易懂的建议&#xff0c;以加强网站…

【机器学习合集】泛化与正则化合集 ->(个人学习记录笔记)

文章目录 泛化与正则化1. 泛化(generalization)2. 正则化方法2.1 显式正则化方法显式正则化方法对比提前终止模型的训练多个模型集成Dropout技术 2.2 参数正则化方法2.3 隐式正则化方法方法对比 泛化与正则化 1. 泛化(generalization) 泛化不好可能带来的问题 模型性能不稳定容…

安全响应中心 — 垃圾邮件事件报告(10.13)

2023年10月 第二周 一. 样本概况 ✅ 案例1&#xff1a;DocuSign钓鱼 本周收到一封看似来自 DocuSign&#xff08;DocuSign 是一种在企业环境中广泛使用的电子协议管理平台&#xff09;的网络钓鱼电子邮件反馈。 如下图所示&#xff1a; 以上样本内容大体是说XX发送了一份文…

【postman】postman的使用与postman汉化

postman的使用 Postman 是一个接口测试工具软件&#xff0c;可以帮助开发人员管理测试接口。 官网&#xff1a;Postman API Platform psotman环境 首先import的或则new 创建一个环境 Variable 变量名 Type 类型 Initial value 初始值 C…