Excutor线程池原理详解

2023-11-05

目录

一、线程池的创建以及参数

二、任务提交的方法

三、线程池参数解释

四、线程池原理

五、线程池原理图

六、execute方法执行流程图


一、线程池的创建以及参数

 public ThreadPoolExecutor(int corePoolSize, //核心线程数
                           int maximumPoolSize, //最大线程数
                           long keepAliveTime, //线程允许的空闲时间
                           TimeUnit unit, //keepAliveTime的时间单位
                           BlockingQueue<Runnable> workQueue, //阻塞队列
                           ThreadFactory threadFactory, //创建线程工厂
                           RejectedExecutionHandler handler  //拒绝策略) 

二、任务提交的方法

public void execute() //提交任务无返回值
public Future<?> submit() //任务执行完成后有返回值

三、线程池参数解释

corePoolSize:线程池中的核心线程数,当提交一个任务时,线程池创建一个新线程执行任务,直到当前线程数等于corePoolSize。

maximumPoolSize:线程池中允许的最大线程数。如果当前阻塞队列满了,且继续提交任务,则需要创建非核心线程数执行任务,核心线程数和非核心线程数的总数小于或者等于maximumPoolSize。

KeepAliveTime:线程池维护线程允许的空闲时间。当线程池中的线程数量大于corePoolSize,如果这时没有新的任务提交,核心线程外的线程不会立即销毁,会等到时间超过keepAliveTime之后销毁。

unit:keepAliveTime的时间单位。

workQueue:用来保存等待被执行任务的阻塞队列,且任务必须实现Runable接口。

threadFactory:用来创建线程。

handler:拒绝策略,①:AbortPolicy:直接抛出异常,默认策略,②:CallerRunsPolicy:用调用者所在的线程来执行任务,③:DiscardOldestPolicy:丢弃阻塞队列中靠最前的任务,并执行当前任务,④:DiscardPolicy:直接丢弃任务。

四、线程池原理

1、线程提交任务到线程池,线程池创建核心线程数,直到线程数等于corePoolSize;

2、由于线程池中线程数是核心线程数,再提交来的任务不会直接提交到线程池中线程,而是放到队列中,线程池中的线程去队列中获取任务;

3、如果阻塞队列满了,则开始创建非核心线程数来执行任务,线程数小于maximumPoolSize;

4、如果阻塞队列满了且线程数等于maximumPoolSize,那么需通过handler所指定的策略来处理任务;

5、当线程池中数量大于corePoolsize,如果某个非核心线程空闲时间超过KeepAliveTime,线程将被终止。

五、线程池原理图

六、execute方法执行流程图

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Excutor线程池原理详解 的相关文章

  • 在 Java 中克隆对象 [3 个问题]

    这样做会调用Asub的clone方法吗 或者Asub深度克隆是否正确 如果没有的话 有没有办法通过这种方法对Asub进行深度克隆呢 abstract class Top extends TopMost protected Object cl
  • Spring应用中Eureka健康检查的问题

    我正在开发一个基于 Spring 的应用程序 其中包含多个微服务 我的一个微服务充当尤里卡服务器 到目前为止一切正常 在我所有其他微服务中 用 EnableEurekaClient 我想启用这样的健康检查 应用程序 yml eureka c
  • Java 枚举与创建位掩码和检查权限的混淆

    我想将此 c 权限模块移植到 java 但是当我无法将数值保存在数据库中然后将其转换为枚举表示形式时 我很困惑如何执行此操作 在 C 中 我创建一个如下所示的枚举 public enum ArticlePermission CanRead
  • 为什么 JTables 使 TableModel 在呈现时不可序列化?

    所以最近我正在开发一个工具 供我们配置某些应用程序 它不需要是什么真正令人敬畏的东西 只是一个具有一些 SQL 脚本生成功能并创建几个 XML 文件的基本工具 在此期间 我使用自己的 AbstractTableModel 实现创建了一系列
  • 为 java 游戏创建交互式 GUI

    大家好 我正在创建一个类似于 java 中的 farmville 的游戏 我只是想知道如何实现用户通常单击以与游戏客户端交互的交互式对象 按钮 我不想使用 swing 库 通用 Windows 看起来像对象 我想为我的按钮导入自定义图像 并
  • 如何使用assertEquals 和 Epsilon 在 JUnit 中断言两个双精度数?

    不推荐使用双打的assertEquals 我发现应该使用带有Epsilon的形式 这是因为双打不可能100 严格 但无论如何我需要比较两个双打 预期结果和实际结果 但我不知道该怎么做 目前我的测试如下 Test public void te
  • 如何在 Spring 中禁用使用 @Component 注释创建 bean?

    我的项目中有一些用于重构逻辑的通用接口 它看起来大约是这样的 public interface RefactorAwareEntryPoint default boolean doRefactor if EventLogService wa
  • 如何更改javaFX中按钮的图像?

    我正在使用javaFX 我制作了一个按钮并为此设置了图像 代码是 Image playI new Image file c Users Farhad Desktop icons play2 jpg ImageView iv1 new Ima
  • 没有 Spring 的自定义 Prometheus 指标

    我需要为 Web 应用程序提供自定义指标 问题是我不能使用 Spring 但我必须使用 jax rs 端点 要求非常简单 想象一下 您有一个包含键值对的映射 其中键是指标名称 值是一个简单的整数 它是一个计数器 代码会是这样的 public
  • java.lang.IllegalStateException:提交响应后无法调用 sendRedirect()

    这两天我一直在尝试找出问题所在 我在这里读到我应该在代码中添加一个返回 我做到了 但我仍然得到 java lang IllegalStateException Cannot call sendRedirect after the respo
  • 在 junit 测试中获取 javax.lang.model.element.Element 类

    我想测试我的实用程序类 ElementUtils 但我不知道如何将类作为元素获取 在 AnnotationProcessors 中 我使用以下代码获取元素 Set
  • 帮助将图像从 Servlet 获取到 JSP 页面 [重复]

    这个问题在这里已经有答案了 我目前必须生成一个显示字符串文本的图像 我需要在 Servlet 上制作此图像 然后以某种方式将图像传递到 JSP 页面 以便它可以显示它 我试图避免保存图像 而是以某种方式将图像流式传输到 JSP 自从我开始寻
  • Hibernate 的 PersistentSet 不使用 hashCode/equals 的自定义实现

    所以我有一本实体书 public class Book private String id private String name private String description private Image coverImage pr
  • 内部类的构造函数引用在运行时失败并出现VerifyError

    我正在使用 lambda 为内部类构造函数创建供应商ctx gt new SpectatorSwitcher ctx IntelliJ建议我将其更改为SpectatorSwitcher new反而 SpectatorSwitcher 是我正
  • 如何在用户输入数据后重新运行java代码

    嘿 我有一个基本的java 应用程序 显示人们是成年人还是青少年等 我从java开始 在用户输入年龄和字符串后我找不到如何制作它它们被归类为 我希望它重新运行整个过程 以便其他人可以尝试 的节目 我一直在考虑做一个循环 但这对我来说没有用
  • logcat 中 mSecurityInputMethodService 为 null

    我写了一点android应显示智能手机当前位置 最后已知位置 的应用程序 尽管我复制了示例代码 并尝试了其他几种解决方案 但似乎每次都有相同的错误 我的应用程序由一个按钮组成 按下按钮应该log经度和纬度 但仅对数 mSecurityInp
  • java for windows 中的文件图标叠加

    我正在尝试像 Tortoise SVN 或 Dropbox 一样在文件和文件夹上实现图标叠加 我在网上查了很多资料 但没有找到Java的解决方案 Can anyone help me with this 很抱歉确认您的担忧 但这无法在 Ja
  • Cucumber 0.4.3 (cuke4duke) 与 java + maven gem 问题

    我最近开始为 Cucumber 安装一个示例项目 并尝试使用 maven java 运行它 我遵循了这个指南 http www goodercode com wp using cucumber tests with maven and ja
  • Eclipse 启动时崩溃;退出代码=13

    I am trying to work with Eclipse Helios on my x64 machine Im pretty sure now that this problem could occur with any ecli
  • Java中super关键字的范围和使用

    为什么无法使用 super 关键字访问父类变量 使用以下代码 输出为 feline cougar c c class Feline public String type f public Feline System out print fe

随机推荐

  • 电脑不能正常启动windows怎么办,电脑系统无法正常启动

    在用电脑的时候 我们经常会碰到windows服务无法启动的问题 很多朋友也不知道怎么解决 加上导致电脑不能正常启动的因素有很多 所以 下面小编将和大家分享两种电脑无法正常启动windows解决方法 电脑不能正常启动windows怎么办 具体
  • Python做曲线拟合(一元多项式拟合及任意函数拟合)

    目录 1 一元多项式拟合 使用方法 np polyfit x y deg 2 任意函数拟合 使用 curve fit 方法 实例 1 初始化 x 和 y 数据集 2 建立自定义函数 3 使用自定义的函数生成拟合函数绘图 1 一元多项式拟合
  • pip 常用命令及控制台怎么查看python 及pip 和已安装包版本号

    在使用python的时候 经常使用到pip这个工具 可以很方便的线上安装依赖库 当然pip还有很多参数都可以帮我们去查询一些库信息 在安装python的时候 下载带有pip的安装包就可以直接安装pip啦 当然没有带pip的 也可以通过下载安
  • [C] 跨平台使用Intrinsic函数范例2——使用SSE2、AVX指令集 处理 双精度浮点数组求和

    作者 zyl910 本文面对对SSE等SIMD指令集有一定基础的读者 以双精度浮点数组求和为例演示了如何跨平台使用SSE2 AVX指令集 支持vc gcc编译器 在Windows Linux Mac这三大平台上成功运行 一 关键讲解 前文
  • 90道渗透测试面试题(附答案)

    2023年已经快过去一半了 不知道小伙伴们有没有找到自己心仪的工作呀 最近后台收到不少小伙伴说要我整理一些渗透测试的面试题 今天它来了 觉得对你有帮助的话记得点个赞再走哦 1 什么是渗透测试 渗透测试是一种评估计算机系统 网络或应用程序的安
  • 四.javascript对象

    目录 一 对象的介绍 1 对象的概念 2 对象的属性 3 对象的方法 二 创建对象 1 使用构造函数创建内置对象 2 直接创建自定义对象 3 使用自定义构造函数创建对象 三 对象的属性 1 设置对象的属性 2 存取对象属性 3 属性的枚举
  • 使用gpt和mindshow快速制作PPT

    目录 准备工具 PPT制作大体流程 工具 步骤 获取PPT大纲 注意 要markdown格式 编辑 打开MindShow 找不到的可以私信我 编辑 创建ppt 编辑 选择ppt基本样式 编辑 点击下载 不过要提前登录一下就好 编辑 添加动画
  • Qt(c++)调用python一直报错slot、hypot等

    最近在Qt里调用python代码 参考教程 https blog csdn net a137748099 article details 119217197 引入python的include libs之后 在c 里写了简单的调用python
  • 各种通信方式对比

    各种通信方式对比 2011年11月09日 16 58 25 horatio2010 阅读数 444 通信名称 连接端 通信方式 传输顺序 通信速度 I2C scl sda 2 串行 高位 低位 标准模式速度100kbit s 快速模式
  • 前后端常见的几种鉴权方式

    本文链接 https blog csdn net wang839305939 article details 78713124 最近在重构公司以前产品的前端代码 摈弃了以前的session cookie鉴权方式 采用token鉴权 忙里偷闲
  • C#深拷贝和浅拷贝的区别

    先上代码 后解释 public class Person public int Age public DateTime BirthDate public string Name public IdInfo IdInfo
  • C++ Templates:实例化

    延迟实例化 当隐式实例化类模板时 同时也实例化了该模板的每个成员声明 但并没有实例化相应的定义 然而 存在例外 1 如果类模板包含了一个匿名的union 那么该union定义的成员同时也被实例化了 2 作为实例化类模板的结果 虚函数的定义可
  • react ref和组件API

    介绍 昨天学习到了生命周期 今天我们接着昨天的知识点继续学习 今天学习一下state setState以及ref和组件API 大家感兴趣的话可以跟随文章进行学习呦 state和setState state 组件自身状态 setState u
  • 【100%通过率 】【华为OD机试真题】模拟商场优惠打折(一)【2022 Q4

    华为OD机试 题目列表 2023Q1 点这里 2023华为OD机试 刷题指南 点这里 题目描述 模拟商场优惠打折 有三种优惠券可以用 满减券 打折券和无门槛券 满减券 满100减10 满200减20 满300减30 满400减40 以此类推
  • 辛普森悖论

    本系列主要为大家带来一整套的博弈论问题 广义 因为在面试的过程中 除了常规的算法题目 我们经常也会被问到一些趣味题型来考察思维 而这类问题中 很多都有博弈论的影子存在 这些公司里以FLAG Facebook LinkedIn Amazon
  • webpack5.x性能优化之 代码分包 配置文件分离 多入口 SplitChunks cacheGroups runtimeChunk dynamic import(动态导入) 懒加载 魔法注释

    webpack优化 文章目录 webpack优化 代码分离 认识代码分离 多入口起点 Entry Dependencies 入口依赖 SplitChunks chunks 其他的splitChunks属性 很少手动配置 minSize和ma
  • java多线程---C++没有内置的多线程机制,因此必须调用操作系统的多线程功能来进行多线程程序的设计。

    多线程 Java 的特点之一就是内置对多线程的支持 多线程允许同时完成多个任务 实际上多线程使人产生多个任务在同时执行的错觉 因为目前的计算机的处理器在同一时刻只能执行一个线程 但处理器可以在不同的线程之间快速地切换 由于处理器速度非常快
  • uni-app 和 spring boot 实现通知栏消息推送 (第二版)

    背景 上次第一版打包上线后 无法使用推送失效 第一版使用的是 websocket h5puls 原因 估计是云打包后对这个做了一些编译处理 导致失效 解决方案 用官网的教程 走个推服务器 取消后端自己的websocket实现 虽然麻烦 但是
  • 深度学习入门(四):经典网络架构(Alexnet、Vgg、Resnet)

    一 经典网络架构 Alexnet 2012年ImageNet竞赛冠军 8层神经网络 5层卷积层 3层全连接 二 经典网络架构 Vgg 2014 年ImageNet 竞赛冠军 VGG 最大的特点就是它在之前的网络模型上 通过比较彻底地采用 3
  • Excutor线程池原理详解

    目录 一 线程池的创建以及参数 二 任务提交的方法 三 线程池参数解释 四 线程池原理 五 线程池原理图 六 execute方法执行流程图 一 线程池的创建以及参数 public ThreadPoolExecutor int corePoo