javaEE->多线程:线程池

article/2025/6/18 16:07:49

线程池

线程诞生的意义:因为进程的创建/销毁,太重量了(比较慢)

但如果近一步提高创建/销毁的频率,线程的开销也不容忽视。

有两种方法可以提高效率:
1.协程(轻量级线程):相对于线程,把系统调度的过程省略了。

使用协程更多的是go和python

不知道协程能提升多少,防止出现bug,java一般使用线程

2.线程池:帮线程兜底,不至于很慢(就像现实生活中的“海王”)

(内存池、线程池、进程池含义类似)

在使用第一个线程的时候,提前把2,3,4,5(其余)线程创建好;

后续如果想要使用新的线程,不必重新创建,直接调用即可,没有真正的频繁创建销毁,只是从线程池里面取线程使用,等使用完了在还给线程池,这样的话创建线程的开销就减少了。

调用线程比创建新线程效率更高

1.调用线程是纯粹“用户态”的操作

2.创建新的线程 是需要“用户态+内核态”共同完成的 

内核态和用户态:

一段程序在系统内核执行 -> 内核态;

反之,用户态。

官方文档

在java标准库里面,ThreadPoolExecutor类表示线程池。

ThreadPoolExecutor类的构造方法

参数具体含义:

1. 线程数:int corePoolSize, int maximumPoolSize(核心线程数和最大线程数)

corePoolSize -> 核心线程数 -> 正式员工数

maximumPoolSize -> 最大线程数 -> 正式员工数 + 实习员工数

  • 线程池允许创建的最大线程数量。
  • 当工作队列满了,并且当前线程数小于最大线程数时,线程池会创建新的线程来处理任务

eg:

当核心线程处于忙碌中且有大量新的任务需要处理时,会创建实习员工线程,来帮核心线程处理;当任务数量变少时且持续一段时间,核心线程可以闲着(摸鱼),但实习员工线程全部销毁,提高了效率且节省了系统开销。

2. long keepAliveTime, TimeUnit unit(保持存活时间和存活时间的单位)

keepAliveTime:当线程池中的线程数量超过核心线程数时,多余的空闲线程在等待任务的时间超过这个值后,就会被销毁

unit:hour、min、s、ms

3. BlockingQueue<Runnable> workQueue

用来存放线程池中的任务的队列,使用Runnable来描述任务主体。

根据需要设置:

需要优先级:设置PriorityBlockingQueue

不需要优先级,并且任务数目相对恒定:使用ArrayBlockingQueue

不需要优先级,并且任务数目变动大:使用LinkedBlockingQueue

4.ThreadFactory threadFactory(线程工厂)

 通过这个工厂类创建线程(Thread)对象,工厂类里面有方法封装了new Thread的操作,同时给Thread设置了一些属性,我们想要创建线程的时候可以直接使用工厂类的方法创建。

eg:

通过静态方法来封装new操作,在这个静态方法设置不同的属性,构造对象的过程,就称为工厂模式。

5.RejectedExecutionHandler handler(拒绝策略)

workQueue满了,并且线程池中的线程数量已经达到最大线程数时,新的任务将会被拒绝线程池会采用拒绝策略。

Executors类:工厂类

ThreadPoolExecutor使用较复杂,所以通过封装,创建了工厂类Executors;

通过这个类可以创建出不同的线程池对象,内部已经把ThreadPoolExecutor创建好并设置好参数。

eg;使用newFixedThreadPool(4)创建了固定线程数目为4的线程池,往里面添加任务。

线程池的执行流程

线程池如何设置线程数目

我们将任务分为CPU密集型和I/O密集型

CPU密集型:在cpu上执行,当线程数超过CPU核心数时,线程需要竞争CPU时间片,这会带来额外的开销,降低效率。

所以线程数目不应超过N(CPU核心数)

I/O密集型:涉及大量I/O操作,大部分都是在等I/O完成,不是执行CPU,(当一个线程在执行I/O操作时,它会阻塞,释放CPU。此时,CPU可以去执行其他线程的任务)。

I/O密集型任务的线程数可以设置得比CPU核心数多,超过N。

在实际应用中,任务往往是CPU密集型和I/O密集型的混合体。更好的方法是通过实验/测试的方法,找出合适的线程数目。

线程池的模拟实现


http://www.hkcw.cn/article/edNWULDLlj.shtml

相关文章

ubuntu24.04安装教程(图文详解)

Ubuntu 24.04 LTS&#xff0c;代号 Noble Numbat&#xff0c;于 2024 年 4 月 25 日发布&#xff0c;现在可以从 Ubuntu 官方网站及其镜像下载。此版本将在 2029 年 4 月之前接收为期五年的官方安全和维护更新。 关于 Ubuntu 24.04 LTS 的一些关键点&#xff1a; 发布日期&am…

马龙不参加2025赛季乒超联赛 樊振东领衔出战

2025赛季乒超联赛将于6月9日开赛。乒乓世界TTW杂志公布了各俱乐部注册参赛的球员名单,樊振东将代表上海地产集团出战,而马龙则不会参加本赛季的比赛。具体赛程方面,2025赛季乒超联赛分为四个阶段进行。第一阶段比赛于6月9日至11日在河北雄安新区举行;第二阶段比赛于7月25日…

制片人回应黄杨钿甜新剧能否播出 确认将顺利播出

近日,17岁女星黄杨钿甜因佩戴“天价耳环”引发关注。当地通报称,其父亲杨某在雅安工作期间涉嫌违规经商办企业,并在参加公开招录公务员考试和工作期间涉嫌故意隐瞒违法生育二孩问题,监察机关已对此立案调查。随着这一事件的发酵,关于黄杨钿甜主演电视剧《冰湖重生》能否顺…

哈佛女孩对网友质疑的愤懑错位了 舆论风向的骤变

蒋雨融感到纳闷和郁闷是可以想见的。她作为哈佛400年校史上首位中国女毕业生代表,在全体毕业生面前发表演讲,掌声不断,讲完后现场4万多名观众起立致意,让她感觉自己是全哈佛最受欢迎、最受宠爱的人。这在十几年前大概率会成为一个“为国争光”的故事,国内有些媒体以及她在…

MySQL索引优化与事务全攻略

MySQL索引和事务 MySQL索引介绍索引概述 索引作用索引的分类普通索引直接创建索引&#xff1a;修改表结构时添加索引&#xff1a;创建表结构时&#xff0c;同时创建索引&#xff1a; 唯一索引创建唯一索引:修改表结构时添加唯一索引&#xff1a;创建表的时候同时创建唯一索引&a…

MySQL 修改数据的全链路流程

MySQL 修改数据的全链路流程&#xff08;InnoDB&#xff09; 全链路流程图关键步骤详解1. 建立连接阶段2.SQL解析与优化3. InnoDB内存操作4. 日志记录过程5. 二阶段提交&#xff08;2PC&#xff09; 磁盘同步机制1. Redo Log刷盘策略&#xff08;innodb_flush_log_at_trx_commi…

刀郎演唱会重庆站门票即将开抢 拼手速的时候到啦!

山歌响起的地方,刀郎2025巡回演唱会重庆站将于6月21日和22日在华熙LIVE鱼洞举行。门票预售即将开启,准备好抢票吧。演出时间是2025年6月21日和22日晚上7点。票价方面,看台座位分为480元、680元、880元和1080元四个档次,内场票价为1280元。购票平台包括大麦App和携程旅行。预…

陕西有50万年前人类烤肉痕迹 烧烤印记揭示古人类生活

陕西洛南县的龙牙洞遗址距今约50万年。考古人员在该遗址发现了古人类留下的烧烤印记,包括烧得龟裂状的石块和石器上的黑色痕迹。这些痕迹是肉类烧烤时滴落的油脂形成的,成为龙牙洞人用火炙烤肉食的直接证据。责任编辑:0764

警方通报75岁老人开代步车造成事故 操作不当致2人受伤

湖北随州交警通报,6月3日8时38分,75岁的李某家驾驶一辆四轮代步电动车在曾都区聚玉街行驶时,因操作不当引发交通事故,导致2人受伤并住院治疗,但无生命危险。目前,李某家已被公安机关控制,并排除了毒驾和酒驾嫌疑。事故原因正在进一步调查中。责任编辑:0764

美防长香会对台海大放厥词意欲何为 转移负面舆情

5月31日,美国国防部长赫格塞思在新加坡香格里拉对话会上发表讲话,极力炒作所谓“中国威胁”,以逼迫盟国增加军费开支。分析人士认为,赫格塞思公开发表“强硬言论”可能是为了转移外界对其群聊泄密事件等负面舆情的注意力。中国外交部发言人回应称,台湾问题纯属中国内政,任…

两人路上说笑遭多人无端围殴 未成年施暴者被严惩

近日,四川古蔺县一位网友称,5月24日凌晨,她侄子和好友因所骑的车子打滑,在推车时说笑。路过的人听见后,误以为在嘲笑自己,于是纠集数人对她的侄子及其好友进行殴打、侮辱。侄子因此受到心理创伤,现已带孩子去接受心理治疗。6月2日,古蔺县公安局发布通报,5月24日凌晨4时…

桂林暴雨致多小区地下车库被淹 积水严重引发关注

6月2日清晨,广西桂林市区遭遇持续大暴雨,导致多处低洼地带积水严重,甚至有车库被淹。一名网友发布的视频显示,一车库通道处是一个斜下坡,雨水从街头直接往下流,一辆黑色越野车试图从斜坡下面往上面行驶时被倾泻而下的大水挡在中间。视频还显示,斜坡下端的车库被涌入的大…

专访歼-10设计师和制造者们 揭秘“猛龙”背后的故事

我国自主研发的出口型战斗机——歼-10CE,最近在国际地区冲突中一战成名,引起国际军贸市场的广泛关注。这款战斗机由中国航空工业集团成都所设计、成飞制造。它是在歼-10基础上改进的一款用于出口的单发单座多用途战斗机,具有体系协同作战、强电磁对抗环境下超视距多目标攻击…

欧盟批准英意日合资开发六代机 三国合作推进新一代战机

欧洲联盟批准了英国贝宜系统公司、意大利莱奥纳多公司和日本飞机工业振兴有限公司成立合资企业,共同开发第六代战斗机。该合资企业将成为三国“全球作战空中计划”的主要承包商和系统集成商,目标是在2035年底前交付新型战机。新开发的战机将首先供意大利、英国和日本政府使用…

曝宝马计划在副驾驶位添置额外屏幕 迎合中国市场趋势

宝马正在研发新款iDrive X系统,计划在副驾驶位前方增加一块屏幕。这一举措旨在迎合中国消费者的需求,并顺应全球屏幕化仪表盘的潮流。据消息透露,宝马正开发第十代信息娱乐系统iDrive X,并考虑为前排副驾驶位安装乘客显示屏。目前尚不确定哪款车型会首先装备这项设计,但可…

街道办回应“男子拖拽女童进小巷” 嫌疑人已被控制并拘留

近日,一起“6岁女童回家被陌生男子拖进小巷”的事件引起了广泛关注。事发地在娄底市娄星区花山街道,据当地街道办透露,这名拖拽女童的男子并非该辖区居民,目前还不清楚他是否有犯罪记录。而女童一家是当地的租户。事发后,警方迅速控制了嫌疑人。目前,当地民政、妇联等部门…

李在明:若胜选将稳定处理韩中关系 外交政策或将转向务实

韩国总统大选投票将于6月3日举行。根据选前多项民调结果,共同民主党候选人李在明以明显优势领先国民力量党的金文洙和改革新党的李俊锡。2日举行的选前最后一场记者会几乎变成了李在明的“总统政策说明会”。近年来,随着国际地缘政治格局动荡加剧,韩国的战略地位日益突出。前…

卢东亮任山西省代省长 履新常务副省长后升任

6月3日,山西省第十四届人民代表大会常务委员会第二十一次会议决定,卢东亮代理山西省人民政府省长。卢东亮是第二十届中央候补委员,5月底已出任山西省委副书记。2020年5月,卢东亮担任山西省政府党组成员、副省长。2021年10月,在山西省委换届中,卢东亮当选为省委常委,并兼…

著名考古学家段鹏琦逝世 享年87岁贡献卓著

中国社会科学院考古研究所研究员、著名考古学家段鹏琦先生因病医治无效,于2025年6月2日在河南洛阳逝世,享年87岁。段鹏琦1938年出生于河南偃师,1963年毕业于北京大学历史系考古专业,同年进入中国科学院考古研究所工作。他曾任考古研究所团支部书记、汉唐考古研究室副主任、…

华为OD机试真题——生成哈夫曼树(2025B卷:100分)Java/python/JavaScript/C/C++/GO六种最佳实现

2025 B卷 100分 题型 本文涵盖详细的问题分析、解题思路、代码实现、代码详解、测试用例以及综合分析; 并提供Java、python、JavaScript、C++、C语言、GO六种语言的最佳实现方式! 本文收录于专栏:《2025华为OD真题目录+全流程解析/备考攻略/经验分享》 华为OD机试真题《生成…