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

线程池原理

一、线程池的定义

线程池,按照配置参数(核心线程数、最大线程数等)创建并管理若干线程对象,没有任务的时候,这些线程都处于等待空闲状态。如果有新的线程任务,就分配一个空闲线程执行。如果所有线程都处于忙碌状态,线程池会创建一个新线程进行处理或者放入队列(工作队列)中等待。

二、线程池的执行流程

  • 提交一个新线程任务,线程池会分配一个空闲线程,用于执行线程任务;
  •  如果线程池中不存在空闲线程,则线程池会判断当前“存活的线程数”是否小于核心线程数corePoolSize。如果小于核心线程数corePoolSize,线程池会创建一个新的线程(核心线程)去处理新线程任务;如果大于核心线程数corePoolSize,线程池会检查工作队列,判断工作队列是否已满;
  • 如果工作队列未满,则将该线程任务放入工作队列进行等待,当线程池中出现空闲线程,将从工作队列中按照先进先出的规则取出一个线程任务并分配执行;如果工作队列已满,则判断线程数是否超过最大线程数maximumPoolSize;
  • 如果没有超过最大线程数maximumPoolSize,则创建一个新线程(非核心线程)执行新线程任务;如果已经超过最大线程数maximumPoolSize,则直接采用拒绝策略处理新线程任务。

 

参考文章:

线程池的执行流程_线程池执行流程_猿究院顾唯.的博客-CSDN博客

说一下线程池内部工作原理 - 知乎

线程池的执行流程_线程池执行_猿究院Rice__Y的博客-CSDN博客

百度安全验证

http://www.lryc.cn/news/130713.html

相关文章:

  • 拷贝构造函数
  • 数据库: MySQL安装部署、主从
  • Java IO流(二)IO模型(BIO|NIO|AIO)
  • java版本spring cloud 企业工程系统管理 工程项目管理系统源码em
  • 飞天使-k8s简单搭建
  • java中把一个list转tree的方法
  • QT设置widget背景图片
  • 【ROS】话题通信--从理论介绍到模型实现(C++)
  • 服务器数据恢复-EqualLogic存储RAID5数据恢复案例
  • qsort函数详解
  • C#学习,委托,事件,泛型,匿名方法
  • 2023最新版本~KEIL5使用C++开发STM32
  • 汽车领域专业术语
  • H3C交换机如何配置本地端口镜像并在PC上使用Wireshake抓包
  • 零基础自学:2023 年的今天,请谨慎进入网络安全行业
  • 向gitee推送代码
  • 双指针算法实例1(移动零)
  • C#程序随系统启动例子 - 开源研究系列文章
  • 最全攻略之人工智能顶会论文发表
  • Redis基于内存的key-value结构化NOSQL(非关系型)数据库
  • Spring学习笔记+SpringMvc+SpringBoot学习笔记
  • 如何在 3Ds Max 中准确地将参考图像调整为正确的尺寸?
  • 集简云推出的全国第一款 AI+连接器解决方案产品语聚AI
  • git错误记录
  • linux使用jmeter进行压测
  • leetcode 139. 单词拆分
  • 若依的使用(token补充、HTTPS(网络安全)、分页前后端配置)
  • Java源码分析(一)Integer
  • WebRTC音视频通话-WebRTC视频自定义RTCVideoCapturer相机
  • 【基于鲲鹏及openEuler20.03TLS下MySQL8.0.17性能调优】