线程池原理最全详解:从概念到实现
创作时间:
作者:
@小白创作中心
线程池原理最全详解:从概念到实现
引用
CSDN
1.
https://blog.csdn.net/zhzjn/article/details/143191839
线程池是Java并发编程的核心技术之一,广泛应用于高并发场景中。本文将从线程池的基本概念出发,深入探讨其工作原理、实现机制以及使用注意事项,帮助读者全面理解这一重要知识点。
线程池概述
线程池(Thread Pool)是一种多线程管理技术,它维护了一组预先创建的线程,用来执行提交的任务。在 Java 中,线程池通过 Executor 接口进行管理,Executors 工具类提供了各种方便的线程池创建方法。
例如,创建一个固定大小的线程池:
ExecutorService fixedThreadPool = Executors.newFixedThreadPool(4);
通过使用线程池,系统可以避免频繁创建和销毁线程的开销,从而提高性能和响应速度。尤其在任务短小且频繁时,通过复用线程,可以避免大量的资源消耗。
线程池实现原理
线程池的实现原理,如下图所示:
主要包含以下步骤:
第一步:判断核心线程是否有空闲
当有新任务提交到线程池时,线程池会首先检查核心线程池中的线程(数量为 corePoolSize)。
int currentPoolSize = workerCount.get();
if (currentPoolSize < corePoolSize) {
if (addWorker(command, true)) // 创建核心线程执行任务
return;
}
如果核心线程数小于 corePoolSize,或者有核心线程处于空闲状态,线程池会直接创建一个新的核心线程来执行这个任务。
第二步:判断工作队列是否已满
如果核心线程都在执行任务,且线程数量已经达到 corePoolSize,则任务不会立即创建新的线程,而是进入任务队列。
// 第二步:尝试将任务添加到队列
if (workQueue.offer(command)) {
int recheck = workerCount.get();
if (recheck == 0) // 如果线程池空闲,启动一个核心线程
addWorker(null, false);
}
第三步:判断线程池的最大线程数
如果任务队列已满,且线程池中的线程数少于 maximumPoolSize。线程池会尝试创建一个新的非核心线程(即超出 corePoolSize 的线程),用于处理当前提交的任务。
// 第三步:如果队列满了,判断是否可以创建新的非核心线程
else if (!addWorker(command, false)) {
// 第四步:如果无法创建新的非核心线程,执行拒绝策略
reject(command);
}
第四步:拒绝策略
当任务队列已满,且线程池中的线程数已经达到 maximumPoolSize 时,线程池无法接纳更多任务,这时线程池会使用预设的饱和策略来处理这个任务。
// 第四步:如果无法创建新的非核心线程,执行拒绝策略
reject(command);
常见的饱和策略包括:
- AbortPolicy:默认策略,抛出 RejectedExecutionException 异常,通知提交任务的线程池已满;
- CallerRunsPolicy:让提交任务的线程自己执行这个任务,以减少新任务提交的压力;
- DiscardPolicy:直接丢弃当前提交的任务,不做任何处理;
- DiscardOldestPolicy:丢弃队列中最老的任务,然后尝试提交新任务。
线程池的注意事项
配置线程池时需要根据系统负载、CPU 核心数、和任务类型进行合理配置。例如:
- CPU 密集型任务,可以设置 corePoolSize 接近 CPU 核心数;
- I/O 密集型任务,可以设置较高的 corePoolSize,允许更多线程等待 I/O 操作。
阻塞队列的选择也很关键:
- 无界队列,适合任务处理速度较快、不会积压太多任务的场景;
- 有界队列,适用于任务量高的场景,通过限制队列长度防止任务过载。
热门推荐
金丝皇菊茶5大功效与饮用禁忌,一文全掌握
肝左内叶异常强化灶:良性还是恶性?一文读懂诊断与治疗
最近,年轻人流行去医院买面包?中药面包怎么就火了!(附做法)
从伽利略的灯笼到激光干涉仪:人类测量光速的300年探索
阿司匹林能治左前降支狭窄吗?
运动损伤预防指南:六大实用措施,让运动更安全
周田明教授教你饮食预防肾结石
帝王笔下的诗词世界:解读那些动人的“名场面”
石丕民夫妇揭秘:环游全国最佳自驾路线
韩语学习热潮:状语从句的正确打开方式
刑天铠甲勇士:用传统文化打造国产特摄剧的巅峰
科学喂养阿拉斯加雪橇犬:从幼犬期到成犬期的饮食指南
央视《远方的家》揭秘澜沧江-湄公河:从源头到传说
一文掌握数据分析:课程体系与职业发展全景图
中国科学家揭秘月球磁铁矿之谜
冬季滴耳液使用指南:加温是关键,这些步骤要记牢
南京农业大学王源超团队揭秘大豆高产秘诀
科学管理猫咪行为,让主子秒变乖巧萌宠
石榴季来了!高纤富钾,软籽品种更受欢迎
山楂:冬季养生神器,健康零食首选
从避暑到品酒:绵竹4大古镇特色游玩攻略
每日食黑枣,健康益处多——最新营养解析
大野山古田银耳泡发秘籍,你get了吗?
武隆旅游通行卡:户外运动爱好者的冰雪奇缘
姚启昆教你视频剪辑摄影技巧
胡桃科植物分心木,现代研究揭示11种药理功效
研究证实:权威型育儿方式促进儿童大脑发育与心理健康
脊柱侧弯患者的睡姿指南:这样睡更健康
达特茅斯医学院破解HSV疫苗研发难题
吕布并非“爱耍赖”:还原一个真实的历史名将