线程池的工作原理


程序员的公众号:源1024,获取更多资料, 无加密无套路!

最近整理了一份大厂面试资料《史上最全大厂面试题》,Springboot、微服务、算法、数据结构、Zookeeper、Mybatis、Dubbo、linux、Kafka、Elasticsearch、数据库等等
获取方式: 关注公众号并回复 666 领取,更多内容持续奉上


线程池主要是利用线程的复用性,将任务的提交和线程的创建、管理、执行分离,线程池来统一管理和调度,减少了创建和销毁线程的开销,提高了系统的效率。

线程池的工作原理

1、任务提交时,线程池首先检查当前线程数是否小于核心线程数,如果小于,则新建一个线程来执行任务。
2、如果当前线程数已经达到核心线程数,而且队列中没有正在执行的任务时,则将任务放入队列中等待执行。
3、如果队列已满,且线程池中的线程数量未达到最大线程数,则新建线程来执行任务。
4、如果队列已满,且线程池中的线程数量达到最大线程数,则根据拒绝策略来处理无法执行的任务。

线程池的参数:

  1. 核心线程数(corePoolSize) 这是线程池中一直保持活动状态的最小线程数量。核心线程在空闲时不会被销毁,除非启用了 allowCoreThreadTimeOut 选项。核心线程数的设置直接影响了线程池的基本并发度。

  2. 最大线程数(maximumPoolSize) 当任务提交到线程池时,首先会尝试使用已有的空闲线程来处理,如果没有空闲线程则根据需要创建新线程。最大线程数限制了线程池可以创建的最大线程数量,过高的设置可能会导致资源消耗过多。

  3. keepAliveTime 和 TimeUnit 这两个参数用于控制空闲线程的存活时间。如果线程在空闲时间超过 keepAliveTime 指定的时间段,它将被终止并从线程池中移除。合理的设置可以降低线程池的维护成本。

  4. 工作队列(workQueue) 工作队列用于存储等待执行的任务。不同类型的工作队列(如有界队列或无界队列)对线程池的性能有一定影响。有界队列可以避免无限制的任务积压,但可能导致任务丢失,而无界队列可能会占用更多的内存。

实际工作中,要根据我们的实际情况,通过合理配置和调整参数,来优化线程池的性能,确保高效地处理任务并避免资源浪费。

相关推荐
搬砖的工人42 分钟前
记录WinFrom 使用 Autoupdater.NET.Official 进行软件升级更新
java·前端·.net
努力进修1 小时前
【JavaEE初阶】 多线程编程核心:解锁线程创建、方法与状态的创新实践密码
android·java·java-ee
xiezhr1 小时前
见过哪些醍醐灌顶的Java代码:从"卧槽"到"原来如此"的顿悟
java·后端·设计模式
当战神遇到编程1 小时前
数组的定义与使用
java·idea
三角叶蕨1 小时前
Redis极简入门 整合springboot
java·redis
稻草猫.1 小时前
Java网络编程套接字
java·后端·java-ee·idea
云泽8083 小时前
函数模板与类模板:C++泛型编程核心解析
java·开发语言·c++
缺点内向7 小时前
Java:创建、读取或更新 Excel 文档
java·excel
带刺的坐椅7 小时前
Solon v3.4.7, v3.5.6, v3.6.1 发布(国产优秀应用开发框架)
java·spring·solon
四谎真好看9 小时前
Java 黑马程序员学习笔记(进阶篇18)
java·笔记·学习·学习笔记