线程池创建类ThreadPoolExecutor介绍

2023-10-27

ThreadPoolExecutor:使用给定的初始参数和默认线程工厂和拒绝的执行处理程序创建一个新的线程池执行器

一 构造方法参数说明 

有四个构造方法,最终都是调用构造方法四

构造方法参数说明:
@param corePoolSize: 保留在池中的线程数,即使它们是空闲的,除非allowCoreThreadTimeOut被设置
@param maximumPoolSize: 池中允许的最大线程数
@param keepAliveTime :当线程数大于核心时,这是多余的空闲线程在终止之前等待新任务的最大时间
@param unit: keepAliveTime参数的时间单位
@param workQueue: 用于在任务执行之前保存任务的队列。这个队列将只保存由execute方法提交的Runnable任务
@param threadFactory: 当执行器创建一个新线程时使用的工厂
@param handler: 由于达到线程边界和队列容量而阻塞执行时使用的处理程序

构造方法一

构造方法二

构造方法三

构造方法四

二 RejectedExecutionHandler说明

由于达到线程边界和队列容量而阻塞执行时使用的处理程序,如果不指定则默认AbortPolicy

 private static final RejectedExecutionHandler defaultHandler = new AbortPolicy();

AbortPolicy(默认) 直接抛出RejectedExecutionException异常
CallerRunsPolicy 直接调用线程处理
DiscardPolicy 什么都不做丢弃被拒绝的任务
DiscardOldestPolicy 丢弃最老的未处理请求然后重试的被拒绝的任务

三 BlockingQueue<Runnable> 工作队列介绍

用于在任务执行之前保存任务的队列,共有七个实现类

ArrayBlockingQueue 由数组支持的有界阻塞队列。该队列对元素进行FIFO(先进先出)排序。队列头是在队列中停留时间最长的元素。队列的尾部是在队列中时间最短的元素。新元素插入到队列的尾部,队列检索操作获取队列头部的元素。
DelayQueue 一种由延时元素组成的无界阻塞队列,其中一个元素只能在其延迟过期时被获取。队列的头是delay元素,它的延迟在过去过期的时间最长。如果没有过期的延迟,则没有头部,poll将返回null。当元素的getDelay(TimeUnit.NANOSECONDS)方法返回一个小于或等于0的值时,就会发生过期。即使不能使用take或poll删除未过期的元素,它们也会被视为普通元素。例如,size方法返回过期和未过期元素的计数。这个队列不允许空元素。
LinkedBlockingQueue 基于链接节点的可选边界阻塞队列。该队列对元素进行FIFO(先进先出)排序。队列头是在队列中停留时间最长的元素。队列的尾部是在队列中时间最短的元素。新元素插入到队列的尾部,队列检索操作获取队列头部的元素。链接队列通常比基于数组的队列具有更高的吞吐量,但在大多数并发应用程序中性能较难以预测。
LinkedBlockingDeque 基于链接节点的可选边界阻塞deque
LinkedTransferQueue 基于链接节点的无界TransferQueue。该队列针对任何给定的生产者对元素进行FIFO(先进先出)排序。队列头是某个生产者在队列中待的时间最长的元素。队列的尾部是某个生产者在队列上停留的时间最短的元素。
PriorityBlockingQueue 一个无界阻塞队列,它使用与类PriorityQueue相同的排序规则并提供阻塞检索操作。虽然这个队列在逻辑上是无界的,但是试图添加的内容可能会由于资源耗尽而失败(导致OutOfMemoryError)。该类不允许空元素。依赖于自然排序的优先级队列也不允许插入不可比较的对象(这样做会导致ClassCastException)。
SynchronousQueue 一个阻塞队列,其中每个插入操作必须等待另一个线程的相应删除操作,反之亦然。同步队列没有任何内部容量,甚至连一个容量都没有。您无法窥视同步队列,因为只有当您试图删除某个元素时,它才会出现;你不能插入一个元素(使用任何方法),除非另一个线程试图删除它;你不能迭代,因为没有什么需要迭代的。队列头是第一个加入队列的线程试图添加到队列中的元素;如果没有这样的队列线程,那么就没有可以删除的元素,poll()将返回null。对于其他Collection方法(例如contains), SynchronousQueue充当一个空集合。这个队列不允许空元素。

四 ThreadFactory到底有什么作用呢?
        

        ThreadFactory是一个接口,接口中只有一个newThread方法;可以写一个此接口的实现类,此实现类最重要的一个作用就是设置线程名称,多线程调试起来本来就费劲,如果没有标识符,那就更难了。所以这个功能还是很重要的,并且也是编码规范中推荐的。当然实现类的写法可以多种多样,如果不指定线程工厂实现类,会使用JDK默认的DefaultThreadFactory

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

线程池创建类ThreadPoolExecutor介绍 的相关文章

  • java中的csv到pdf文件

    我正在尝试获得一个csv文件解析为pdf 到目前为止我所拥有的内容附在下面 我的问题是这段代码最终出现在 pdf 中的文件在 csv 文件的第一行被截断 我不明白为什么 附示例 本质上我想要一个没有任何操作的 csv 文件的 pdf 版本
  • 检查双精度值的等于和不等于条件

    我在比较两者时遇到困难double values using and 我创建了 6 个双变量并尝试进行比较If健康 状况 double a b c d e f if a b c d e f My code here in case of t
  • 如何从另一个xml文件动态更新xml文件?

    我想从另一个 xml 文件更新 xml 文件 我使用了一个 xml 文件 如下所示 one xml
  • 如何解决 onEditCommit 事件上的类型不匹配错误?

    我在 Fxml 中使用 onEditCommit 事件在用户编辑数据后检索数据 FXML 代码
  • Java:从元素创建 DOM 元素,而不是文档

    如您所知 在 Java 中创建 Dom 元素的正确方法是执行以下操作 import org w3c dom Document import org w3c dom Element Document d Element e e d creat
  • 如何将 Spotlight for Help 插入本地化的 macOS 应用程序?

    我正在 macOS 上使用 Swing GUI 框架实现 Java 应用程序 当使用system外观和感觉以及screen菜单栏 Swing 自动插入一个搜索栏 called 聚光灯寻求帮助 https developer apple co
  • Spring Stomp over Websocket:流式传输大文件

    我的SockJs客户端在网页中 发送帧大小为16K的消息 消息大小限制决定了我可以传输的文件的最大大小 以下是我在文档中找到的内容 Configure the maximum size for an incoming sub protoco
  • 如何将 XMP XML 块序列化为现有的 JPEG 图像?

    我有许多 JPEG 图像 其中包含损坏的 XMP XML 块 我可以轻松修复这些块 但我不确定如何将 固定 数据写回图像文件 我目前正在使用 JAVA 但我愿意接受任何能让这项任务变得容易的事情 这是目标关于 XMP XML 的另一个问题
  • 所有junit测试后的清理

    在我的项目中 我必须在所有测试之前进行一些存储库设置 这是使用一些棘手的静态规则来完成的 然而 在所有测试之后我不知道如何进行清理 我不想保留一些神奇的静态数字来引用所有测试方法的数量 我应该一直维护它 最受赞赏的方法是添加一些侦听器 该侦
  • 使用 java 按电子邮件发送日历邀请

    我正在尝试使用 java 发送每封电子邮件的日历邀请 收件人收到电子邮件 但不会显示接受或拒绝的邀请 而是将该事件自动添加到他的日历中 我正在使用 ical4j jar 构建活动 邀请 private Calendar getInvite
  • 如何在java中使jpeg无损?

    有没有人可以告诉我如何使用编写 jpeg 文件losslessjava中的压缩 我使用下面的代码读取字节来编辑字节 WritableRaster raster image getRaster DataBufferByte buffer Da
  • 将 RSA 密钥从 BigIntegers 转换为SubjectPublicKeyInfo 形式

    WARNING 最初的问题是关于 PKCS 1 编码密钥 而问题中的实际示例需要SubjectPublicKeyInfo X 509 编码密钥 我目前正致力于在 java 中从头开始实现 RSA 算法 特别是密钥生成方面 现在我的代码可以给
  • 如何为 Jackson 编写一个包罗万象的(反)序列化器

    当您提前知道类型时 编写自定义序列化器非常容易 例如 MyType一个人可以写一个MyTypeSerializer extends StdSerializer
  • 在 Selenium WebDriver 上如何从 Span 标签获取文本

    在 Selenium Webdriver 上 如何从 span 标记检索文本并打印 我需要提取文本UPS Overnight Free HTML代码如下 div id customSelect 3 class select wrapper
  • 使用 Java 从 S3 上的文件在 S3 上创建 zip 文件

    我在 S3 上有很多文件 需要对其进行压缩 然后通过 S3 提供压缩文件 目前 我将它们从流压缩到本地文件 然后再次上传该文件 这会占用大量磁盘空间 因为每个文件大约有 3 10MB 而且我必须压缩多达 100 000 个文件 所以一个 z
  • 从java中的字符串数组中删除空值

    java中如何从字符串数组中删除空值 String firstArray test1 test2 test4 我需要像这样没有 null 空 值的 firstArray String firstArray test1 test2 test4
  • 如何移动图像(动画)?

    我正在尝试在 x 轴上移动船 还没有键盘 我如何将运动 动画与boat png而不是任何其他图像 public class Mama extends Applet implements Runnable int width height i
  • 从一个文本文件中获取数据并将其移动到新的文本文件

    我有一个文件 里面有数据 在我的主要方法中 我读入文件并关闭文件 我调用另一种方法 在原始文件的同一文件夹内创建一个新文件 所以现在我有两个文件 原始文件和通过我调用的方法生成的文件 我需要另一种方法 从原始文件中获取数据并将其写入创建的新
  • Java中获取集合的幂集

    的幂集为 1 2 3 is 2 3 2 3 1 2 1 3 1 2 3 1 假设我有一个Set在爪哇中 Set
  • Spring Boot MSSQL Kerberos 身份验证

    目前在我的春季靴子中application properties文件中 我指定以下行来连接到 MSSql 服务器 spring datasource url jdbc sqlserver localhost databaseName spr

随机推荐

  • I - Tree Gym - 104385I(基础操作性质)

    这题呢 就是知道异或的性质就可以了 一 相同为0 不同为1 即 1 1 0 0 0 0 1 0 1 二 1 交换律 A B B A 2 结合律 A B C A B C 3 自反性 A B B A 由结合律可推 A B B A B B A 0
  • Opencv3.3版本以上使用CNN模型实现年龄和性别检测

    环境 1 安装opencv3 3以上 因为3 3以上才有dnn模块 目前opencv已经更新到opencv4 0 0 alpha 下面网站对更新日志一目了然 https github com opencv opencv wiki Chang
  • vue3.0 + Ts v-model在自定义组件上的使用教程

    前言 之前在vue2 0版本介绍v model在组件上的使用教程时详细介绍了vue3 0 v model相比于2 0的变化 本篇文章主要介绍一下vue3 0的使用教程 如何使用 第一步 index vue作为父组件 这里采用了vant框架
  • Centos7.9 安装Openstack Train版 详细手把手每一步搭建

    1 升级内核 先准备两台机器 我这里准备的是2台 32G 16核 500G硬盘的服务器 一台作为master 一台作为计算节点机器 master 机器有两个网卡 一个是ip 10 10 162 38 另一个网卡和10 10 162 38是同
  • 攻防演练场景中面临的常见加密威胁-SSH隧道工具sish

    工具介绍 sish是一个开源的反向代理工具 通过在公共的端点和本地运行的服务器之间建立一个安全的ssh通道 该工具的功能是将内网端口暴露在公网上 该工具部署在公网中 本地无需安装 无需注册 支持转发的协议有HTTP S WS S TCP 优
  • python中%符号详解

    python中 符号详解 a 星期几的简写 A 星期几的全称 b 月分的简写 B 月份的全称 c 标准的日期的时间串 C 年份的后两位数字 d 十进制表示的每月的第几天 D 月 天 年 e 在两字符域中 十进制表示的每月的第几天 F 年 月
  • Webpack之image

    CSS中的图片处理 直接从外部引入css的背景等图片是打包不出来的 需要用到url loader和file loader file loader 解决引用路径的问题 file loader可以解析项目中的url引入 不仅限于css 根据我们
  • 双指针的实践

    一 双指针的一般解法 双指针指的是在遍历对象的过程中 不是普通的使用单个指针进行访问 而是使用两个相同方向 快慢指针 或者相反方向 对撞指针 的指针进行扫描 从而达到相应的目的 它只是一种算法技巧 二 26题 删除有序数组中的重复项 2 1
  • OpenGL实现通用GPU计算概述

    可能比较早一点做GPU计算的开发人员会对OpenGL做通用GPU计算 随着GPU计算技术的兴起 越来越多的技术出现 比如OpenCL CUDA OpenAcc等 这些都是专门用来做并行计算的标准或者说接口 OpenGL用来做通用GPU计算主
  • Lora模块的定向传输

    原子哥的 两个LORA模块工作在一般模式定向传输数据的测试方法 使用上位机测试 OpenEdv 开源电子网 1 准备两LORA模块和两USB转TTL电路 2 ATK LORA 01配置软件 模块A占用COM10 模块B占用COM22 端口号
  • vue3实现mapbox鼠标定位显示经纬度

    vue3实现鼠标定位显示经纬度 leafletMap on mousemove function e var location leafletMap queryRenderedFeatures e point document getEle
  • c#基础知识---匿名方法

    我们已经提到过 委托是用于引用与其具有相同标签的方法 换句话说 您可以使用委托对象调用可由委托引用的方法 匿名方法 Anonymous methods 提供了一种传递代码块作为委托参数的技术 匿名方法是没有名称只有主体的方法 在匿名方法中您
  • Linux学习笔记——Linux命令行使用技巧

    目录 一 前言 二 Linux是什么 三 关于shell的使用 1 shell命令行提示符 2 shell打开方式 1 右键打开 此方式打开的shell在当前用户的桌面上 2 Application gt System tools gt t
  • Linux系统命令 - 查看内存使用情况

    一 查看内存使用情况 在Linux系统中 大部分操作都通过命令行来完成 因为大部分情况下不开启图形界面 在服务器环境 则只能通过shell执行操作 下面介绍查看内存使用情况的相关命令 包括物理内存 RAM 和交换内存 swap 我们经常需要
  • 前端面试总结之CSS

    文章目录 1 BFC 块级格式化上下文 重点关注 2 CSS盒子模型 3 清除浮动 4 隐藏元素的方法及各自的特点 5 line height和heigh区别 6 用CSS画三角形 7 圣杯布局 三栏布局方式两边固定中间自适应 与双飞翼布局
  • CGAL几何库配置教程

    1 下载源码 进入CGAL官网 下载源码压缩包 GMP库和MPFR库 图1 官方配置教程如图2所示 可供参考 图2 要下载的文件如图3所示
  • 机器学习之决策树

    http t csdn cn 2sWSP决策树 http t csdn cn NdlCs next and iter 函数 http t csdn cn tRN4I sort values and value counts 函数 http
  • Python往excel表格里面插入图片并控制图片的大小

    coding UTF 8 import xlrd import xlwt import requests import json import xlsxwriter from xlutils copy import copy import
  • 【课程设计】数据库:火车票管理系统

    课程设计 数据库 火车票管理系统 摘要 本文主要介绍了火车票管理系统 其中包括其选题功能概述 对该系统的方案方法设计 以及过程实现等内容 由于系统的代码量较大 因此将会较为抽象地对思想进行介绍 在必要时会举出一些实例 还会附上成果展示以及安
  • 线程池创建类ThreadPoolExecutor介绍

    ThreadPoolExecutor 使用给定的初始参数和默认线程工厂和拒绝的执行处理程序创建一个新的线程池执行器 一 构造方法参数说明 有四个构造方法 最终都是调用构造方法四 构造方法参数说明 param corePoolSize 保留在