2023面试系列 线程池用过居然不知道底层原理,啥也不是!

news2025/7/9 12:36:59

1.为什么使用线程池:


1. 减少线程频繁的创建跟销毁带来的性能消耗

2. 便于管理线程

3. 提高响应速度(不用等待线程创建)

4. 能提供更多的功能

2.线程池的创建方式:


通过Executors创建

通过ThreadPoolExecutor创建(提倡)

3.线程池的参数说明:


corePoolSize

MaxinumPoolSize

keepAliveTime

TimeUint unit

BlockingQueue<Runnable> workQueue,

RejectedExecutionHandler handler

4.线程池的流程:


-当有任务的时候,如果当前线程数小于核心线程数,那么先创建核心线程数去执行任务。

当线程数已达到核心线程数时,则将任务加入到阻塞队列中去。当阻塞队列满了之后,如果当前线程数大于核心线程数,小于最大线程数时,则创建非核心线程数去执行。如果不满足,则执行拒绝策略

线程池的状态:

Running-ShowDown-ShowDownNow-Stop-Tidying-Terminated

5.线程池的几个重要方法来深入底层原理


-excute(Runnable command)
-addWorker(Runnable fistTask,boolean core)


小结:


--addWorker方法有三种不同的参数调用,在增加任务的过程中,对线程池状态跟线程数进行了多次判断

addWorker(first,true):小于核心线程数,创建核心线程去 执行任务

addWorker(null,false):添加到阻塞队列中去,线程数<最大线程数

addWorker(first,false):阻塞队列已满,创建新的非核心线程去执行任务

-runWorker(Worker w)
-getTask()
-processWorkerExit(Worker w,boolean completedAbruptly)

6.线程池技术亮点:


线程池通过使用CAS跟AutomicInteger来改变线程数量跟线程状态,核心参数用Volatile来修饰,同时使用Condition、ReentrantLock对创建线程的过程,线程池状态的改变,工作任务数量的改变(添加跟删除)等,来通过allowCoreThreadTimeOut || wc > corePoolSize来判断使用poll还是take方法或者任务,Worker同时也继承了AQS(不可重入,线程运行时就不会中断)

7.使用线程池需要注意的点:


1.合理的设置核心线程、最大线程数,充分利用资源,同时也要避免资源的浪费。

2.选择好拒绝策略,注意抛出异常的处理。

3.不合理的设置阻塞队列,选用了LinkedBlockedQueue导致线程池溢出

4.重复创建的线程池,记得showdown

5.根据业务需要,设置allowCoreThreadTimeOut(true),回收被阻塞的核心线程

8. 简单自定义线程池名字:区分不同业务下的线程池


9. 简单自定义拒绝策略

10. 留给小作业

阻塞队列满了,怎么处理呢?
 

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

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

相关文章

【基础计算机网络1】认识计算机网络体系结构,了解计算机网络的大致模型(上)

前言 今天&#xff0c;小编我也要进入计算机网络的整个内容&#xff0c;虽然这个计算机网络的内容在考研部分中占比比较小&#xff0c;有些人不把这一部分当成重点&#xff0c;这种想法是错误的。我觉得考研的这四个内容都是非常重要的&#xff0c;我们需要进行全力以赴的对待每…

【C++】异常处理详解

本篇文章重点将会对C中的异常的相关处理操作进行详解。希望本篇文章的内容会对你有所帮助。 目录 一、C语言的异常处理 二、C异常 2、1 异常概念 2、2 异常的使用 2、3 异常类 2、4 异常的重新抛出 三、异常的安全与规范 3、1 异常的安全 3、2 异常的规范 四、异常的优缺点 &am…

如何使用CSS实现一个带有动画效果的折叠面板(Accordion)?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 带有动画效果的折叠面板&#xff08;Accordion&#xff09;⭐ 写在最后 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带你启航前端之旅 欢迎来到前端入门之旅&#xff01;这个…

FPGA时序分析与约束(4)——时序分析,时序约束,时序收敛

一、前言 在之前的文章中&#xff0c;我们介绍了组合电路的时序和时序电路的时序问题&#xff0c;之后又把理想化的时钟变成了实际的时钟考虑了进来&#xff0c;在阅读本文之前&#xff0c;强烈推荐优先阅读本系列之前的文章&#xff0c;毕竟这是我们继续学习的基础&#xff0c…

Elasticsearch 8.X 可以按照数组下标取数据吗?

1、线上环境问题 老师、同学们&#xff0c;有人遇到过这个问题么&#xff0c;索引中有一个 integer 数组字段&#xff0c;然后通过脚本获取数组下标为1的值作为运行时字段&#xff0c;发现返回的值是乱的&#xff0c;并不是下标为1的值&#xff0c; 具体如下: DELETE my_index …

36岁男子自称被裁,曾是前500强公司市场总监,最后接受做外买

(点击即可收听) 最近有一个新闻,上了头条,36岁男子自称被裁,是前500强公司市场总监,一年没找到工作,以前不信年龄是道坎 以为自己的经验和履历,能在找到一份相匹配的工作不成问题 但是现实却很残酷,一年后,仍然没有找到对口的工作,即使降低了薪资标准,可依旧找不到 都说疫情前难…

逻辑回归Logistic

回归 概念 假设现在有一些数据点&#xff0c;我们用一条直线对这些点进行拟合&#xff08;这条直线称为最佳拟合直线&#xff09;&#xff0c;这个拟合的过程就叫做回归。进而可以得到对这些点的拟合直线方程。 最后结果用sigmoid函数输出 因此&#xff0c;为了实现 Logisti…

3D视觉测量:形位公差 面对面垂直度(附源码)

文章目录 0. 测试效果1. 基本内容2. 实现方法2. 代码实现3. 参考文章目录:3D视觉测量目录微信:dhlddxB站: Non-Stop_0. 测试效果 1. 基本内容 垂直度用于描述被测要素相对基准(面/轴)的垂直(90)程度。是一个表面或轴线与一个基准面(通常是垂直于图纸纸面的一个面)之间的…

Leetcode 16.07 最大数值

编写一个方法&#xff0c;找出两个数字a和b中最大的那一个。不得使用if-else或其他比较运算符。 示例&#xff1a; 输入&#xff1a; a 1, b 2 输出&#xff1a; 2 我的答案&#xff1a; 为了找出两个数中的较大者&#xff0c;而不使用比较或条件语句&#xff0c;我们可以…

Linux常用命令——cupsdisable命令

在线Linux命令查询工具 cupsdisable 停止指定的打印机 补充说明 cupsdisable命令用于停止指定的打印机。 语法 cupsdisable(选项)(参数)选项 -E&#xff1a;当连接到服务器时强制使用加密&#xff1b; -U&#xff1a;指定连接服务器时使用的用户名&#xff1b; -u&#…

【无公网IP内网穿透】异地远程访问本地SQL Server数据库

目录 1.前言 2.本地安装和设置SQL Server 2.1 SQL Server下载 2.2 SQL Server本地连接测试 2.3 Cpolar内网穿透的下载和安装 2.3 Cpolar内网穿透的注册 3.本地网页发布 3.1 Cpolar云端设置 3.2 Cpolar本地设置 4.公网访问测试 5.结语 1.前言 数据库的重要性相信大家…

jdk-8u371-linux-x64.tar.gz jdk-8u371-windows-x64.exe 【jdk-8u371】 全平台下载

jdk-8u371 全平台下载 jdk-8u371-windows-x64.exejdk-8u371-linux-x64.rpmjdk-8u371-linux-x64.tar.gzjdk-8u371-macosx-x64.dmgjdk-8u371-linux-aarch64.tar.gz 下载地址 迅雷云盘 链接&#xff1a;https://pan.xunlei.com/s/VNdLL3FtCnh45nIBHulh_MDjA1?pwdw4s6 百度…

uni-app之android离线打包

一 AndroidStudio创建项目 1.1&#xff0c;上一节演示了uni-app云打包&#xff0c;下面演示怎样androidStudio离线打包。在AndroidStudio里面新建空项目 1.2&#xff0c;下载uni-app离线SDK&#xff0c;离线SDK主要用于App本地离线打包及扩展原生能力&#xff0c;SDK下载链接h…

2023开学礼新疆理工学院图书馆藏八一新书《乡村振兴战略下传统村落文化旅游设计》许少辉新财经理工

2023开学礼新疆理工学院图书馆藏八一新书《乡村振兴战略下传统村落文化旅游设计》许少辉新财经理工

GraalVM Community Edition 22.3.3

https://github.com/graalvm/graalvm-ce-builds/releases/ 按需下载 https://github.com/graalvm/graalvm-ce-builds/releases/download/vm-22.3.3/graalvm-ce-java11-windows-amd64-22.3.3.ziphttps://github.com/graalvm/graalvm-ce-builds/releases/download/vm-22.3.3/nat…

山西电力市场日前价格预测【2023-09-03】

日前价格预测 预测明日&#xff08;2023-09-03&#xff09;山西电力市场全天平均日前电价为316.78元/MWh。其中&#xff0c;最高日前电价为405.32元/MWh&#xff0c;预计出现在19: 15。最低日前电价为249.46元/MWh&#xff0c;预计出现在12: 15。 价差方向预测 1&#xff1a; 实…

公司文件数据防泄密软件——「天锐绿盾透明加密防泄密系统」

天锐绿盾透明加密防泄密系统是一款利用驱动层透明加密技术实现电子文件安全加密的防护产品。该系统集成了密码学、访问控制和审计跟踪等技术手段&#xff0c;对企事业单位电子文件的存储、访问、传播和处理过程进行全方位防护&#xff0c;从源头上保障数据安全和使用安全。 PC访…

springboot web开发登录拦截器

在SpringBoot中我们可以使用HandlerInterceptorAdapter这个适配器来实现自己的拦截器。这样就可以拦截所有的请求并做相应的处理。 应用场景 日志记录&#xff0c;可以记录请求信息的日志&#xff0c;以便进行信息监控、信息统计等。权限检查&#xff1a;如登陆检测&#xff…

.NET之后,再无大创新

回想起来&#xff0c;2001年发布的.NET已经是距离最近的一次软件开发技术的整体创新了&#xff0c;后续的新技术就没有在各个端都这么成功的了。.NET是Windows平台下软件开发技术的巨大变革。在此之前&#xff0c;有VB、C&#xff08;MFC&#xff09;、JSP&#xff0c;在此之后…

cms系统稳定性压力测试出现TPS抖动和毛刺的性能bug【杭州多测师_王sir】

一、并发线程数100&#xff0c;分10个阶梯&#xff0c;60秒加载时间&#xff0c;运行1小时进行压测&#xff0c;到10分钟就出现如下 二、通过jstat -gcutil 16689 1000进行监控