干货-并发编程提高——线程池-Executor (十三)

news2024/11/18 14:01:15

Executor 框架(java线程基础)不仅包括了线程池的管理,还提供了线程工厂、队列以及拒绝策略等,Executor 框架让并发编程变得更加简单。

/**
* 用给定的初始参数创建一个新的ThreadPoolExecutor。
*/
public ThreadPoolExecutor(int corePoolSize,//线程池的核心线程数量
int maximumPoolSize,//线程池的最大线程数
long keepAliveTime,//当线程数大于核心线程数时,多余的空闲线程存活的最长时间
TimeUnit unit,//时间单位
BlockingQueue<Runnable> workQueue,//任务队列,用来储存等待执行任务的队列
ThreadFactory threadFactory,//线程工厂,用来创建线程,一般默认即可
RejectedExecutionHandler handler//拒绝策略,当提交的任务过多而不能及时处理时,我们可以定制策略来处理任务
) {
if (corePoolSize < 0 ||
maximumPoolSize <= 0 ||
maximumPoolSize < corePoolSize ||
keepAliveTime < 0)
throw new IllegalArgumentException();
if (workQueue == null || threadFactory == null || handler == null)
throw new NullPointerException();
this.corePoolSize = corePoolSize;
this.maximumPoolSize = maximumPoolSize;
this.workQueue = workQueue;
this.keepAliveTime = unit.toNanos(keepAliveTime);
this.threadFactory = threadFactory;
this.handler = handler;
}

参数含义解释:

1.corePoolSize:the number of threads to keep in the pool, even if they are idle, unless {@code allowCoreThreadTimeOut} is set(核心线程数大小:不管它们创建以后是不是空闲的。线程池需要保持 corePoolSize 数量的线程,除非设置了 allowCoreThreadTimeOut。)

2.maximumPoolSize:the maximum number of threads to allow in the pool。(最大线程数:线程池中最多允许创建 maximumPoolSize 个线程。)

3.keepAliveTime:when the number of threads is greater than the core, this is the maximum time that excess idle threads will wait for new tasks before terminating。(存活时间:如果经过 keepAliveTime 时间后,超过核心线程数的线程还没有接受到新的任务,那就回收。)

4.unit:the time unit for the {@code keepAliveTime} argument(keepAliveTime 的时间单位。)

5.workQueue:the queue to use for holding tasks before they are executed.  This queue will hold only the {@code Runnable} tasks submitted by the {@code execute} method。(存放待执行任务的队列:当提交的任务数超过核心线程数大小后,再提交的任务就存放在这里。它仅仅用来存放被 execute 方法提交的 Runnable 任务。所以这里就不要翻译为工作队列了,好吗?不要自己给自己挖坑。)

6.threadFactory:the factory to use when the executor creates a new thread。(线程工程:用来创建线程工厂。比如这里面可以自定义线程名称,当进行虚拟机栈分析时,看着名字就知道这个线程是哪里来的,不会懵逼。)

7.handler :the handler to use when execution is blocked because the thread bounds and queue capacities are reached。(拒绝策略:当队列里面放满了任务、最大线程数的线程都在工作时,这时继续提交的任务线程池就处理不了,应该执行怎么样的拒绝策略。)

当提交的任务数大于(workQueue.size() + maximumPoolSize )

当功能还是比较重要的时候,最好的方式还是自定义拒绝任务方式,如记录日志发送mq,发送异常邮件等记录问题比较好,然后再拒绝。

线程池的四种拒绝策略:

AbortPolicy - 丢弃任务,并抛出拒绝执行 RejectedExecutionException 异常信息。线程池默认的拒绝策略。必须处理好抛出的异常,否则会打断当前的执行流程,影响后续的任务执行。也可在捕获RejectedExecutionException 时做特殊处理。

DiscardPolicy - 直接丢弃,其他啥都没有。(不关心)

DiscardOldestPolicy -  当触发拒绝策略,只要线程池没有关闭的话,丢弃阻塞队列 workQueue 中最老的一个任务,并将新任务加入.FIFO。(就是因为你是先到的,所以你走吧)

CallerRunsPolicy - 当触发拒绝策略,只要线程池没有关闭的话,则使用调用线程直接运行任务。一般并发比较小,性能要求不高,不允许失败。但是,由于调用者自己运行任务,如果任务提交速度过快,可能导致程序阻塞,性能效率上必然的损失较大。(你行你上啊!我上就我上)这个网上怎么说会伸缩呢?要是伸缩的话,何必自己上呢,直接扔队列里不就完事儿了?看了源码并没有扩容,网上这帮狗

连接池,资源池,线程池 都是池化的表现。需要考虑的是,注意返还对象要清除对象的状态避免出现问题。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2065984.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[创业之路-141] :产品经理 - NPDP概述

目录 一、产品经理以及主要职责 1.1 概述 1、市场调研与需求分析 2、产品规划与设计 3、项目管理与协调 4、产品推广与销售支持 5、产品运营与维护 6、其他职责 1.2 产品经理与项目经理的职责分工 1.2.1 职责区别 产品经理 项目经理 1.2.2 合作方式 二、什么是NP…

Oracle数据库最新的支持服务年限

根据图示&#xff0c;建议尽快升级到19c或者23ai

各种JOIN的区别

1. Inner Join(Join , 内连接) 功能&#xff1a; 返回两个表中都有的记录信息 也称之为自然连接 inner可以省略&#xff0c;inner join join 图解&#xff1a; 语法&#xff1a; SELECT columns FROM Table_A A INNER JOIN Table_B B ON A.column B.column;结果&#xff…

【Sql Server】使用row_number over方式进行表分页,数据量达到五千多条记录后,查询变慢需要20多秒的解决方案

大家好&#xff0c;我是全栈小5&#xff0c;欢迎来到《小5讲堂》。 这是《Sql Server》系列文章&#xff0c;每篇文章将以博主理解的角度展开讲解。 温馨提示&#xff1a;博主能力有限&#xff0c;理解水平有限&#xff0c;若有不对之处望指正&#xff01; 目录 前言单字段查询…

缓存出海方案

优质博文&#xff1a;IT-BLOG-CN 一、挑战/注意事项 【1】框架组不允许在不同地区部署的独立Redis实例拥有相同的名称&#xff0c;因此不同地区需要使用不用的Redis集群名称。 【2】分布式锁问题&#xff1a; 该场景需要保证key与UCS灰度策略是可以同步的&#xff0c;即同一…

从《黑神话:悟空》爆火看中国游戏行业的崛起

近年来&#xff0c;中国游戏行业经历了前所未有的快速发展与变革&#xff0c;而《黑神话:悟空》的爆火更是成为了这一进程中的标志性事件。这款游戏不仅在国内市场引起了巨大轰动&#xff0c;也在全球范围内赢得了广泛关注与赞誉&#xff0c;其成功背后折射出中国游戏行业在技术…

住宅代理和移动代理的全面比较:提高隐私和效率的最佳选择

近年来随着网络的发展&#xff0c;我们在网络上的行为越来越透明化。网络隐私和数据安全已经成为企业和个人用户不可忽视的一部分&#xff0c;如何提高我们的网络访问安全指数是一个值得商讨的问题。当下&#xff0c;代理技术在提高网络效率方面发挥了重要作用。本文将深入探讨…

redis面试(十八)RedLock加锁原理

什么是redLock RedLock算法思想&#xff0c;不只在一个redis实例上创建锁&#xff0c;是在多个redis实例上创建锁&#xff0c;n / 2 1&#xff0c;必须在大多数redis节点上都成功创建锁&#xff0c;才能算这个整体的RedLock加锁成功&#xff0c;避免说仅仅在一个redis实例上加…

uni-app01

工具:HuilderX noed版本:node-v17.3.1 npm版本:8.3.0 淘宝镜像:https://registry.npmmirror.com/ 未安装nodejs可以进入这里https://blog.csdn.net/a1241436267/article/details/141326585?spm1001.2014.3001.5501 目录 1.项目搭建​编辑 2.项目结构 3.使用浏览器运行…

【数据结构】总结二叉树的概念以及存储结构

目录 1. 树的概念及结构 1.1 树的名词定义 1.2 树的表示 2. 二叉树的概念及结构 2.1 二叉树的概念 2.2 特殊的二叉树 2.2.1 满二叉树 2.2.2 完全二叉树 2.3 二叉树的存储结构 2.3.1 顺序存储 2.3.2 链式存储 3. 选择题 1. 树的概念及结构 1.1 树的名词定义 1. 节…

基于x86 平台opencv的图像采集和seetaface6的口罩人脸检测识别功能

目录 一、概述二、环境要求2.1 硬件环境2.2 软件环境三、开发流程3.1 编写测试3.2 配置资源文件3.2 验证功能一、概述 本文档是针对x86 平台opencv的图像采集和seetaface6的口罩人脸检测识别功能,opencv通过摄像头采集视频图像,将采集的视频图像送给seetaface6的口罩人脸检测…

Docusign 电子签名的合法性指南【中国】

电子签名法律概述 中华人民共和国&#xff08;“中国”&#xff09;于2004年颁布了《电子签名法》&#xff08;“电子签名法”&#xff09;&#xff0c;并于2015年和2019年进行了重大修订。电子签名法规定&#xff0c;只要当事人同意采用电子签名形式&#xff0c;文件的法律效…

基于重要性加权的LLM自我改进:考虑分布偏移的新框架

LLM自我改进的典型范式是在自生成数据上训练LLM,但是其中的部分数据可能有害,所以应该被过滤掉。但是目前的工作主要采用基于答案正确性的过滤策略,在这篇论文中,证明过滤掉正确但具有高分布偏移程度(DSE)的样本也可以有利于自我改进的结果。 论文的主要贡献如下: 提出了一个…

高并发集群饿了么后端的登录模块

高并发集群饿了么后端的登录模块 1.数据库 非交互式python&#xff1a; 非交互式: 2.数据库的负载均衡&#xff1a;阿里巴巴的mycat 修改配置文件 /usr/local/mycat/conf/server.xml :对外的账号 密码 数据库 /usr/local/mycat/conf/schema.xml 如果出现启动异常&…

搭建自己的金融数据源和量化分析平台(七):定时更新上市公司所属行业门类及大类

0x00 前言 由于此前从深交所下载的股票信息中只有行业门类信息&#xff0c;没有行业大类信息&#xff0c;导致后续解析三大报表和量化选股的时候无法进行&#xff1a; 可以看到深交所的股票是没有大类信息的。 再看看上交所的保险股&#xff1a; 因此需要将深交所股票的所属…

关于 IoTDB 的疑问,我们这次有奖征集!

新的社区活动来啦&#xff01; 你是否对 IoTDB 的技术/操作还有疑问&#xff0c;并需要得到原厂研发团队的解答&#xff1f; 你是否希望在踊跃提出疑问的同时&#xff0c;收获一份精美小礼物&#xff1f; 为回馈新老朋友对 Apache IoTDB 开源社区的活跃贡献&#xff0c;最新社区…

数据结构day01(数据结构、算法基础知识)

目录 【1】数据结构基础知识 1》什么是数据结构 2》数据 3》逻辑结构 1>线性关系 2>层次关系 3>网状关系 4》存储结构 1>顺序存储 2>链式存储 3>索引存储结构 4>散列存储 5》操作 【2】算法基础知识 1> 什么是算法 2> 算法设计 3> 算…

8金收官!仿真工程师为你揭秘中国跳水梦之队的“水花消失术”

巴黎奥运会上&#xff0c;中国跳水梦之队再一次上演“水花消失术”&#xff0c;不仅赢得了裁判的高分&#xff0c;也令全球观众惊叹不已。 发挥出色的运动员入水如同“牛奶入水”&#xff0c;顺滑得仿佛不带一丝涟漪&#xff1b;而发挥失误的运动员仿佛“炸鱼队”来袭&#xf…

.Net Linux平台下System.Drawing.Imaging替代方案

文章目录 前言一、ImageSharp库二、SkiaSharp库三、System.Drawing.Common库总结 前言 在.NET Standard中&#xff0c;System.Drawing.Imaging 命名空间并不直接支持&#xff0c;因为 System.Drawing 命名空间主要是为了Windows Forms&#xff08;WinForms&#xff09;和GDI设计…

FPGA第 5 篇,FPGA技术优略势,FPGA学习方向,FPGA学习路线,FPGA专业知识的学习方向(FPGA现场可编程门阵列学习路线和方向)

前言 前几篇讲了一下FPGA的发展和应用&#xff0c;以及未来前景。具体详细&#xff0c;请看 FPGA发展和应用&#xff0c;以及未来前景https://blog.csdn.net/weixin_65793170/category_12665249.html 这里我们来&#xff0c;记录一下&#xff0c;FPGA专业知识的学习路线 一.…