线程池原理

一、线程池的定义

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

二、线程池的执行流程

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

参考文章:

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

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

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

百度安全验证

相关推荐
程序员小白条12 小时前
0经验如何找实习?
java·开发语言·数据结构·数据库·链表
小马爱打代码12 小时前
Spring AI:搭建自定义 MCP Server:获取 QQ 信息
java·人工智能·spring
郭涤生12 小时前
QT 架构笔记
java·数据库·系统架构
daidaidaiyu13 小时前
基于LangGraph开发复杂智能体学习一则
java·ai
小小8程序员13 小时前
STL 库(C++ Standard Template Library)全面介绍
java·开发语言·c++
a努力。13 小时前
Redis Java 开发系列#2 数据结构
java·数据结构·redis
a努力。14 小时前
腾讯Java面试被问:String、StringBuffer、StringBuilder区别
java·开发语言·后端·面试·职场和发展·架构
Vic1010115 小时前
解决 Spring Security 在异步线程中用户信息丢失的问题
java·前端·spring
QD_IT伟16 小时前
SpringBoot项目整合Tlog 数据链路的规范加强
java·spring boot·后端
源码获取_wx:Fegn089516 小时前
基于springboot + vue二手交易管理系统
java·vue.js·spring boot·后端·spring·课程设计