线程池理解及7个参数

news2025/2/25 12:07:49

定义理解

线程池其实是一种池化的技术实现,池化技术的核心思想就是实现资源的复用,避免资源的重复创建和销毁带来的性能开销。线程池可以管理一堆线程,让线程执行完任务之后不进行销毁,而是继续去处理其它线程已经提交的任务。

使用线程池的好处

  • 降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。
  • 提高响应速度。当任务到达时,任务可以不需要等到线程创建就能立即执行。
  • 提高线程的可管理性。线程是稀缺资源,如果无限制的创建,不仅会消耗系统资源,还会降低系统的稳定性,使用线程池可以进行统一的分配,调优和监控。

构造参数

在这里插入图片描述

  • corePoolSize:线程池中用来工作的核心线程数量
  • maximumPoolSize:最大线程数,线程池允许创建的最大线程数。当线程池中的线程数达到corePoolSize后,如果任务队列已满,且需要继续处理新任务,线程池会创建新线程(但总数不超过maximumPoolSize)来处理这些任务。(相当于排队区满了后,后来的线程可以直接插队)如果任务数超过了maximumPoolSize,且任务队列已满,则线程池会根据拒绝策略来处理这些无法执行的任务。
  • keepAliveTime:超出 corePoolSize 后创建的线程存活时间或者是所有线程最大存活时间,取决于配置。
  • unit:keepAliveTime 的时间单位
  • workQueue:任务队列,是一个阻塞队列,当线程数达到核心线程数后,会将任务存储在阻塞队列中。常见实现:BlockingQueue接口的实现类,如ArrayBlockingQueue、LinkedBlockingQueue等。
  • threadFactory :线程池内部创建线程所用的工厂
  • handler:拒绝策略;当队列已满并且线程数量达到最大线程数量时,会调用该方法处理任务。

如何设置参数

1. 确定核心线程数(corePoolSize)

  • CPU密集型任务:对于CPU密集型任务,通常将核心线程数设置为CPU核心数的1到2倍之间。这可以确保充分利用CPU资源,同时避免过多的上下文切换。
  • IO密集型任务:对于IO密集型任务,由于线程在等待IO操作时不会占用CPU,因此可以设置更多的核心线程数。一般来说,可以将核心线程数设置为CPU核心数的2倍以上,以便在等待IO时能够处理更多的任务。
  • 混合型任务:如果应用程序同时包含CPU密集型和IO密集型任务,则需要根据具体情况来平衡核心线程数的设置。

2. 确定最大线程数(maximumPoolSize)

  • 资源受限的环境:在资源受限的环境中(如嵌入式系统或云服务器),需要限制最大线程数以防止过多线程占用资源。
  • 高并发系统:对于需要处理大量并发请求的系统,可以适当增加最大线程数以提高系统的并发处理能力。但是,最大线程数的设置应该基于系统的负载能力和资源状况进行综合考虑。

3. 设置线程空闲时间(keepAliveTime)

  • CPU密集型应用:对于CPU密集型应用,通常可以将线程空闲时间设置为较短的值,因为CPU资源非常宝贵,不希望有过多的空闲线程占用资源。在某些情况下,甚至可以将其设置为0,表示不保留非核心线程。
  • IO密集型应用:对于IO密集型应用,由于线程在等待IO操作时不会占用CPU资源,因此可以将线程空闲时间设置为较长的值(如1分钟以上),以避免线程频繁启动和销毁造成的性能开销。

4. 选择任务队列(workQueue)

  • 有界队列:使用有界队列可以限制任务在队列中的等待时间,避免因为任务过多而导致内存溢出。但是,如果队列长度设置过小,可能会导致任务被拒绝。(一般选择有界队列
  • 无界队列:使用无界队列可以尽可能地缓存所有任务,但是需要注意内存消耗问题。如果使用了无界队列,线程池的最大线程数参数可能会变得无效,因为线程池不会尝试创建新线程来处理队列中的任务。

5. 配置线程工厂(threadFactory)

线程工厂用于创建新线程。通过自定义线程工厂,可以设定线程的优先级、守护线程状态等属性,也可以为线程设置有意义的名字,便于在JVM中进行问题诊断。

6. 配置拒绝策略(handler)

当线程池无法处理新任务时(即线程数已达到maximumPoolSize,且任务队列已满),需要配置拒绝策略来处理这些无法执行的任务。常见的拒绝策略包括直接抛出异常用调用者所在的线程来执行任务忽略新任务以及抛弃队列中最老的任务等。也可以根据需要自定义拒绝策略。

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

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

相关文章

【pytorch18】Logistic Regression

回忆线性回归 for continuous:y xwbfor probability output:yσ(xwb) σ:sigmoid or logistic 线性回归是简单的线性模型,输入是x,网络参数是w和b,输出是连续的y的值 如何把它转化为分类问题?加了sigmoid函数,输出的值不再是…

springboot服务启动读取不到application.yml中的nacos.config信息

我的版本: 可以添加bootstrap.yml文件,在里面添加nacos.config的配置信息 也可以添加VM参数 -Dspring.cloud.nacos.discovery.server-addr -Dspring.cloud.nacos.config.server-addr -Dspring.cloud.nacos.config.namespace -Dspring.cloud.nacos.discov…

Java实现登录验证 -- JWT令牌实现

目录 1.实现登录验证的引出原因 2.JWT令牌2.1 使用JWT令牌时2.2 令牌的组成 3. JWT令牌(token)生成和校验3.1 引入JWT令牌的依赖3.2 使用Jar包中提供的API来实现JWT令牌的生成和校验3.3 使用JWT令牌验证登录3.4 令牌的优缺点 1.实现登录验证的引出 传统…

LeetCode刷题之搜索二维矩阵

2024 7/5 一如既往的晴天,分享几张拍的照片嘿嘿,好几天没做题了,在徘徊、踌躇、踱步。蝉鸣的有些聒噪了,栀子花花苞也都掉落啦,今天给他剪了枝,接回一楼来了。ok,做题啦! 图1、宿舍…

EDA 2023 年世界国家suicide rate排名

文章目录 前言:关于数据集列 导入模块导入数据数据预处理探索性数据分析按性别划分的自杀率 [箱线图]相关矩阵热图自杀率最高的 15 个国家变化百分比最高的 15 个国家/地区2023 年世界地图上自杀率的国家 结尾: 前言: 随着社会的不断发展和变迁,人们对于各种社会问…

154. 寻找旋转排序数组中的最小值 II(困难)

154. 寻找旋转排序数组中的最小值 II 1. 题目描述2.详细题解3.代码实现3.1 Python3.2 Java 1. 题目描述 题目中转:154. 寻找旋转排序数组中的最小值 II 2.详细题解 该题是153. 寻找旋转排序数组中的最小值的进阶题,在153. 寻找旋转排序数组中的最小值…

2024 年第十四届亚太数学建模竞赛(中文赛项)浅析

需要完整B题资料,请关注:“小何数模”! 本次亚太(中文赛)数学建模的赛题已正式出炉,无论是赛题难度还是认可度,该比赛都是仅次于数模国赛的独一档,可以用于国赛前的练手训练。考虑到大家解题实属不易&…

品牌推广的核心价值:作用解析与意义探讨!

在激烈的市场竞争环境之下,品牌推广已经成为企业不可缺少的一部分。不仅关乎企业的知名度,对市场份额更是起到了决定性的作用。 作为一名手工酸奶品牌的创始人,目前全国也复制了100多家门店,这篇文章,我将和大家分享品…

web学习笔记(八十)

目录 1.小程序实现微信一键登录 2. 小程序的授权流程 3.小程序配置vant库 4.小程序配置分包 5.小程序配置独立分包 6.小程序分包预下载 1.小程序实现微信一键登录 要先实现小程序一键登录首先我们需要给按钮设置一个绑定事件,然后在绑定事件内部通过wx.login…

ETAS工具导入Com Arxml修改步骤

文章目录 前言Confgen之前的更改Confgen之后的修改CANCanIfComComMEcuM修改CanNmCanSMDCMCanTp生成RTE过程报错修改DEXT-诊断文件修改Extract问题总结前言 通讯协议栈开发一般通过导入DBC实现,ETAS工具本身导入DBC也是生成arxml后执行cfggen,本文介绍直接导入客户提供的arxml…

FastAPI+vue3+Primeflex教学20240706,渲染阶乘案例

子绝父相 相对定位是相对于自己原本的位置定位。 绝对定位,如果父元素设置了相对定位,则相对于父元素进行绝对定位,否则相对于最近的设置了相对定位的元素进行绝对定位,或者相对于根元素进行绝对定位。 定位有四个方向&#xff0…

白嫖A100-interLM大模型部署试用活动,亲测有效-2.Git

申明 以下部分内容来源于活动教学文档: Docs git 安装 是一个开源的分布式版本控制系统,被广泛用于软件协同开发。程序员的必备基础工具。 常用的 Git 操作 git init 初始化一个新的 Git 仓库,在当前目录创建一个 .git 隐藏文件夹来跟踪…

Ubuntu基本环境配置

#Jdk 安装 #--查看 已安装 的jdk软件 java -version # 安装jdk软件(如果有选择请选 y) sudo apt install openjdk-11-jdk # 自行学习 vi 或 vim 学习网址如下: # https://www.runoob.com/linux/linux-vim.html #-- 修改系统级 path : /etc/profile 文件 (注意要…

每周算法:无向图的双连通分量

题目链接 冗余路径, Redundant Paths G 题目描述 为了从 F F F 个草场中的一个走到另一个,奶牛们有时不得不路过一些她们讨厌的可怕的树。 奶牛们已经厌倦了被迫走某一条路,所以她们想建一些新路,使每一对草场之间都会至少有两条相互分离…

【踩坑】解决undetected-chromedriver报错cannot connect to-chrome

转载请注明出处:小锋学长生活大爆炸[xfxuezhagn.cn] 如果本文帮助到了你,欢迎[点赞、收藏、关注]哦~ 更新: 发现一个非常好用的项目,直接内置uc: GitHub - seleniumbase/SeleniumBase: 📊 Pythons all-in…

内网通讯软件有哪些?

企业内部内网通讯工具是为了满足企业内部沟通和协作需求而设计的软件工具,其主要特点是在内网环境下进行通讯,以保证安全性和可控性。以下是一些常见的内网通讯软件,在企业内部通讯中起着重要的作用。 1. Microsoft Teams Microsoft Teams是…

批导会计凭证程序报错,通过监控点和消息类来定位触发的位置

ZFIU001 批导会计凭证报错,通过监控点和消息类来定位触发的位置 在使用程序导入会计凭证的时候,发现报错,后面找了很久很久的系统标准程序,打断点才找到这个位置,使用监控点还是可以比较快速找到报错的原因的&#xff…

代码随想录算法训练营第74天:路径总结[1]

代码随想录算法训练营第74天:路径总结 ‍ A * 算法精讲 (A star算法) 卡码网:126. 骑士的攻击(opens new window) 题目描述 在象棋中,马和象的移动规则分别是“马走日”和“象走田”。现给定骑士的起始坐标和目标…

Android 如何通过代码实时设置EditTextView光标

背景:换肤框架下,QA进行深色浅色切换说输入框光标颜色没有改变,转UI结果UI说需要修改!!!!! 本来有方法可以设置,但是 设置后未生效。重新进入该页面才生效!&a…

用Excel处理数据图像,出现交叉怎么办?

一、问题描述 用excel制作X-Y散点图,意外的出现了4个交叉点,而实际上的图表数据是没有交叉的。 二、模拟图表 模拟部分数据,并创建X-Y散点图,数据区域,X轴数据是依次增加的,因此散点图应该是没有交叉的。…