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

线程池学习之执行流程、拒绝策略、线程池状态

线程池(Thread Pool)是一种管理和复用线程的机制,它在多线程编程中被广泛使用,主要目的是提高线程的利用率和性能,减少线程创建和销毁的开销。线程池的执行流程通常包括提交任务、判断当前存活线程数是否小于核心线程数、判断工作队列是否已满、判断当前存活线程数是否达到最大线程数、任务执行与线程回收几个步骤;

一、线程池执行流程

1、提交任务

当出现一个新的线程任务时,线程池会尝试分配一个空闲线程来执行该任务。

2、判断当前存活线程数是否小于核心线程数

如果线程池中不存在空闲线程,则线程池会判断当前“存活线程数”是否小于核心线程数;

小于核心线程数:如果当前存活线程数小于核心线程数(corePoolSize),线程池会创建一个新的核心线程,用来处理新任务。
大于核心线程数:如果当前存活线程数大于核心线程数,线程池会进入下一步判断。

3、判断工作队列是否已满

未满:如果工作队列(用于存储等待执行的任务)未满,线程池会将新任务放入工作队列中等待,等线程池中出现空闲线程时,再按照“先进先出”的规则分配执行。
已满:如果工作队列已满,线程池会进入下一步判断。

4、判断当前存活线程数是否达到最大线程数

小于最大线程数:如果当前存活线程数小于最大线程数(maximumPoolSize),线程池会创建一个新的非核心线程来执行新任务。
等于或大于最大线程数:如果当前存活线程数已经达到或超过最大线程数,线程池会采用拒绝策略来处理新任务。

二、常见的拒绝策略

AbortPolicy:直接抛出RejectedExecutionException异常,阻止系统正常运行(默认策略)。
CallerRunsPolicy:用调用者所在线程来执行任务,不会抛出异常。
DiscardPolicy:不处理该任务,直接丢弃掉。
DiscardOldestPolicy:丢弃最老的未处理的任务请求。
自定义拒绝策略:实现RejectedExecutionHandler接口,自定义任务被拒绝时的处理逻辑。

三、线程池的状态

线程池的状态分为以下几种:

RUNNING:运行状态,线程池一旦被创建就处于RUNNING状态,该状态的线程池会接受新任务,并处理工作队列中的任务。调用线程池的shutdown()方法,可以切换到SHUTDOWN关闭状态;调用线程池的shutdownNow()方法,可以切换到STOP停止状态。
SHUTDOWN:关闭状态,该状态线程池不会接收新任务,但会处理工作队列中的任务。当工作队列为空时,并且线程池中执行的任务也为空时,线程池会进入TIDYING()状态。
STOP:停止状态,该状态不会接收新任务,也不会处理阻塞队列中的任务,而且会中断正在运行的任务;线程池中执行的任务为空,进入TIDYING状态。
TIDYING:整理状态,所有任务已运行终止。terminated执行完毕,进入TERMINATED状态。
TERMINATED:终止状态,该线程池彻底关闭。


http://www.kler.cn/a/376736.html

相关文章:

  • jmeter压测工具环境搭建(Linux、Mac)
  • 前端的导入导出「CommonJS」「ES Module」模块化规范
  • PHP文件包含漏洞
  • 【重生之我要苦学C语言】深入理解指针4
  • Web应用性能测试工具 - httpstat
  • 如何在Linux系统中使用SSH进行安全连接
  • 心觉:别再等完美工具了!用“小米加步枪”也能战斗,边干边升级才是最强策略!
  • 搜索引擎算法更新对网站优化的影响与应对策略
  • Tenda路由器 敏感信息泄露
  • FreeRTOS工程编译缺失头文件freertos_mpool.h或freertos_os2.h
  • Leetcode 热题100 之 二叉树3
  • 结合无监督表示学习与伪标签监督的自蒸馏方法,用于稀有疾病影像表型分类的分散感知失衡校正|文献速递-基于生成模型的数据增强与疾病监测应用
  • 从0开始学PHP面向对象内容之(类,对象,构造/析构函数)
  • npm入门教程9:npm配置
  • Python爬虫:揭开淘宝商品描述的神秘面纱
  • 逼着自己深度思考
  • 四款主流的3D创作和游戏开发软件的核心特点和关系
  • 前端 javascript 存储数据的方式有哪些
  • 归并排序速记
  • python 数据结构 2
  • 【云原生】云原生后端:数据管理
  • 设计卷积神经网络CNN为什么不是编程?
  • NFT Insider #153:The Sandbox 推出 Biggie 奇妙宇宙体验,ApeChain 推出顶级交易员游戏
  • 达梦数据库-同义词简介
  • 软考:大数据架构设计
  • 【多态】析构函数的重写