线程池原理

一、线程池的定义

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

二、线程池的执行流程

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

参考文章:

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

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

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

百度安全验证

相关推荐
I_Jln9 分钟前
CountDownLatch:让多线程同步如此简单
java
虎子_layor10 分钟前
轻量级哈希扰动工具:Hashids,快速上手
java·spring
逻极10 分钟前
VS Code之Java 开发完全指南:从环境搭建到实战优化
java·开发语言
Moe48814 分钟前
JDK动态代理和CGLIB动态代理源码解析
java·后端
月月玩代码14 分钟前
SLF4J,简单门面Java日志框架
java·开发语言
虎子_layor16 分钟前
号段模式(分布式ID)上手指南:从原理到实战
java·后端
lkbhua莱克瓦2417 分钟前
Java基础——集合进阶用到的数据结构知识点3
java·数据结构·github·平衡二叉树·avl
烽学长21 分钟前
(附源码)基于Spring boot的校园志愿服务管理系统的设计与实现
java·spring boot·后端
拾忆,想起27 分钟前
10分钟通关OSI七层模型:从光纤到APP的奇幻之旅
java·redis·网络协议·网络安全·缓存·哈希算法
失散1342 分钟前
分布式专题——49 SpringBoot整合ElasticSearch8.x实战
java·spring boot·分布式·elasticsearch·架构