线程池原理

一、线程池的定义

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

二、线程池的执行流程

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

参考文章:

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

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

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

百度安全验证

相关推荐
MateCloud微服务19 小时前
从 Karpathy 加入 Anthropic 到 Claude Agent 化:MateClaw 为什么要做企业级 Agent Runtime
java·java agent·mateclaw·mateclaw agent·mc runtime·mc harness·mateclaw open
Yolanda9419 小时前
【编程学习】复盘经典 VB OOP 示例:推翻旧认知,重学面向对象
java·面向对象
Y敲键盘的地方19 小时前
第9章 工具调用循环——Agent的行动闭环
java·服务器·前端
专注写bug19 小时前
Java线程池——ThreadLocal上下文污染问题
java
武子康19 小时前
Java-09 深入浅出 MyBatis 注解开发详解:从 CRUD 到复杂关系映射
java·后端·spring
Amctwd20 小时前
【后端】多个后端系统,如何共用一套登录状态?单点登录详解
java
用户2986985301420 小时前
Java 进阶:在 Word 文档中动态增删页面
java·后端
likerhood20 小时前
Java 集合框架入门:List、Set、Queue 与 Map
java·开发语言·list
Java 码思客20 小时前
【Spring AI实战】第2章 大模型基础调用:同步/异步/流式输出
java·人工智能·spring·ai
郝学胜-神的一滴20 小时前
系统设计 013:高并发系统缓存:从原理到实践全解析
java·开发语言·python·缓存·系统架构·php·软件构建