线程池原理

一、线程池的定义

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

二、线程池的执行流程

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

参考文章:

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

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

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

百度安全验证

相关推荐
风清云淡_A1 分钟前
【JPA】spring集成jpa实战之数据增删改查入门教程(二)
java
让我上个超影吧3 分钟前
天机学堂——播放进度方案优化
java·spring boot·redis·spring cloud
月空MoonSky6 分钟前
解决使用Notepad++出现异型字或者繁体字体问题
java·javascript·notepad++
Filotimo_16 分钟前
JWT的概念
java·开发语言·python
min18112345617 分钟前
软件升级全流程步骤详解
android·java·服务器
黎雁·泠崖19 分钟前
Java字符串系列总结篇|核心知识点速记手册
java·开发语言
biyezuopinvip25 分钟前
基于Spring Boot的社区互助平台设计与实现(毕业论文)
java·spring boot·vue·毕业设计·论文·毕业论文·社区互助平台设计与实现
JNU freshman36 分钟前
从 Ceph 16(Pacific)到 Ceph 18(Reef):cephadm 的伸缩性演进与 cephadm agent 到底“成熟”了吗?
java·大数据·ceph
nbsaas-boot42 分钟前
为什么 ScopedValue 是 SaaS 的分水岭
java
小北方城市网43 分钟前
生产级 Spring Boot + MyBatis 核心配置模板
java·spring boot·redis·后端·spring·性能优化·mybatis