当前位置: 首页 > article >正文

线程池底部工作原理

线程池内部是通过线程和队列实现的,当我们通过线程池处理任务时:

如果线程池中的线程数量小于corePoolSize,无论是否有处于空闲的线程,都创建新的线程来处理被添加的任务。

如果线程池中的线程数量等于corePoolSize,缓冲队列workQueue未满,则将被添加的任务放入缓冲队列。

如果线程池中的线程数量大于等于corePoolSize,缓冲队列workQueue已满,但是线程数量小于maximumPoolSize,那么创建新的线程来处理被添加的任务。

如果线程池中的线程数量大于corePoolSize,缓冲队列workQueue已满,并且线程数量等于maximumPoolSize,那么通过handler指定的策略来处理被添加的错误。

如果线程池中的线程数量大于corePoolSize,当线程空闲时间大于keepAliveTime,就将这个线程终止,这样线程池就可以动态调整池中线程数量。

线程池为什么先添加队列而不是先创建最大线程?

当线程池中的核心线程都在忙时,如果继续往线程池中添加任务,那么队伍会先放入队列,队列满了之后才会新开线程。这就相当于,一个公司有10名程序员,本来这10名程序员就能正常处理业务,但随着公司发展,业务量慢慢增加,但是一开始这些需求只会增加在待开发列表中,然后10个程序员加班加点的从待开发列表中获取并进行处理,直到某天开发列表满了,公司现有的程序员真的处理不过来了,所以就开始招员工了。


http://www.kler.cn/a/505243.html

相关文章:

  • Android BitmapShader更简易的实现刮刮乐功能,Kotlin
  • 【Vue3 入门到实战】1. 创建Vue3工程
  • (STM32笔记)十二、DMA的基础知识与用法 第二部分
  • MySQL 排除指定时间内重复记录的解决方案
  • python基础语法(1) ------- 学习笔记分享
  • scrapy爬取图片
  • Matplotlib 图表显示比例控制笔记
  • iOS - block
  • 换了城市ip属地会变吗?为什么换了城市IP属地不变
  • Dubbo泛化调用
  • springMVC实现文件上传
  • Java中的反射机制:动态操作类的秘密武器
  • PHP 字符串
  • doris:手动分区
  • ChatGPT正在朝着全面个人助手迈出重要一步,推出了一个名为“Tasks”的新功能
  • 防火墙配置的关键要素
  • 使用Redis防止重复发送RabbitMQ消息
  • C/C++新春烟花
  • UE_C++ —— UE反射系统
  • Quinlan C4.5剪枝U(0,6)U(1,16)等置信上限如何计算?
  • A4.Springboot-LLama3.2服务自动化构建(一)——构建docker镜像配置
  • 安装 MySQL 数据库
  • Java面试总结(1)
  • 迅翼SwiftWing | ROS 固定翼开源仿真平台正式发布!
  • 2Spark Core
  • 昇腾部署onnx模型问题总结