线程创建 线程池ThreadPoolTaskExecutor 介绍

第一次使用ThreadPoolTaskExecutor实现线程池的经历,反复修改了多次代码才正常使用 在一个向第三方平台推送消息的场景中,为了提高程序的执行效率,每次发送消息,都创建一个新的线程来完成发送消息的任务,为了提供线程的使用性能,我选择了ThreadPoolTaskExecutor线程池,结果在使用的过程中,出现了较多的问题,这里记录一下避免以后再出现类似的错误(这些错误是不应该出现的,还是对ThreadPoolTaskExecutor使用不熟悉造成的)。 阅读详情

1 java 创建线程的方式

1 继承Thread类 重写run方法 创建的线程不共享资源

2 实现Runnable 接口 重写run方法 创建的线程共享资源

3 实现Callable<T> 接口,再使用FutureTask<>封装Callable<T>的对象,这个方式创建的线程共享资源,可以捕获异常,可以有返回值。

3.5可以直接用Exectuors工厂类来创建线程池

4 本项目使用ThreadPoolTaskExecutor  

线程池的配置:

 

执行情况:

参数是一个自定义的类,实现了Runnable 接口

拒绝策略种类:

rejectedExectutionHandler参数字段用于配置绝策略,常用拒绝策略如下

AbortPolicy:用于被拒绝任务的处理程序,它将抛出RejectedExecutionException

CallerRunsPolicy:用于被拒绝任务的处理程序,它直接在execute方法的调用线程中运行被拒绝的任务。

DiscardOldestPolicy:用于被拒绝任务的处理程序,它放弃最旧的未处理请求,然后重试execute。

DiscardPolicy:用于被拒绝任务的处理程序,默认情况下它将丢弃被拒绝的任务。

处理流程

1.查看核心线程池是否已满,不满就创建一条线程执行任务,否则执行第二步。

2.查看任务队列是否已满,不满就将任务存储在任务队列中,否则执行第三步。

3.查看线程池是否已满,即就是是否达到最大线程池数,不满就创建一条线程执行任务,否则就按照策略处理无法执行的任务。

Java ThreadPoolExecutor,Callable,Future,FutureTask 详解 当调用 cancel 时,如果调用成功,而此任务尚未启动,则此任务将永不运行。invokeAny(collection of tasks)/invokeAny(collection of tasks, long timeout, TimeUnit unit):阻塞的方法,不会返回 Future 对象,而是返回集合中某一个Callable 对象的结果,而且无法保证调用之后返回的结果是哪一个 Callable,如果一个任务运行完毕或者抛出异常,方法会取消其它的 Callable 的执行。同样,也带有超时功能; 阅读详情

相关推荐

线程池ThreadPoolTaskExecutor异步处理使用方法

线程池ThreadPoolTaskExecutor依次处理事务的使用方法 添加配置 #线程控制 executor: corePoolSize: 16 #核心线程数目 maxPoolSize: 64 #指定最大线程数 queueCapacity: 16 #队列中最大的数目 keepAliveSeconds: 60 #线程空闲后的最大存活时间 创建一个GlobalConfig配置类 package com.ksxx.platform.mqtt.mqtt; import org.spr

是十月张的博客啊 2036

SpringBoot使用线程池之ThreadPoolTaskExecutor和ThreadPoolExecutor

文章目录前言预热:ThreadPoolExecutor构造器四种拒绝策略ThreadPoolExecutor.AbortPolicyThreadPoolExecutor.CallerRunsPolicyThreadPoolExecutor.DiscardPolicyThreadPoolExecutor.DiscardOldestPolicy工作流程正题:ThreadPoolTaskExecutor继承关系成员变/常量初始化方法高潮:SpringBoot中使用ThreadPoolTaskExecutor创建S

FBB360JAVA的博客 5465

地质建模师必备:用Petrel快速生成浅地层TST/TVT厚度图的5个关键步骤

本文详细解析了地质建模师如何利用Petrel平台,将二维浅地层SEG-Y数据高效转化为真实地层厚度图(TST)和真实垂直厚度图(TVT)。文章系统梳理了从数据规范化导入、坐标系统一、地质界面解释到厚度计算与成图的5个关键实战步骤,并强调了误差控制与工程应用,为海上风电等工程地质评估提供了完整解决方案。

weixin_29204205的博客 518

ThreadPoolExecutor 和 ThreadPoolTaskExecutor,以及引出的思考

ThreadPoolExecutor 和 ThreadPoolTaskExecutor创建线程池有啥不一样? 其实是各自的包不一样 @Configuration public class ThreadPoolConfig { //设置线程数 @Bean(name = "ApplicationThreadPoolExecutor") public ThreadPoolExecutor threadPoolExecutor() { return new Threa

CYC的博客 2085

从 JDK8 到 JDK17:CRMEB 框架升级

【摘要】CRMEB开源框架已成功从JDK8升级至JDK17,带来显著性能提升:并发吞吐量提高35%,响应延迟降低40%,资源占用减少25%。升级方案解决87个技术卡点,支持模块化扩展和微服务转型,兼容SpringBoot3.0等新技术。提供基础版到企业级的升级服务,包含代码重构指导和性能调优。经金融级验证的方案可帮助电商平台实现日均10万+UV承载,支付成功率提升至99.7%。现以低于市场30%的价格提供全周期技术支持,助力企业抢占技术先机。

weixin_39782540的博客 701

从零开始的 AI Infra 学习之路

AI Infra(AI 基础设施)是指为上层的 AI 算法应用提供支持的 AI 全栈底层技术,通过合理利用计算机体系结构,可以实现 AI 计算的加速和部署。AI Infra 主要包括以下内容:AI 训练框架 & 推理引擎;AI 编译 & 计算架构;AI 硬件 & 体系结构。参考资料:;。

AI Infra / LLM / 软件开发 3万+

线程池ThreadPoolExecutor详解(整理详细)

线程池ThreadPoolExecutor详解(整理详细)

yuechuzhixing的博客 3万+

【openEuler容器镜像部署指南】

【代码】【List集合排序 】

weixin_43878094的博客 1111

java线程池创建ThreadPoolTaskExecutor和Executors

一.ThreadPoolTaskExecutor创建方式 1.注入线程池对象五个参数,面试常问 <bean id="taskExcetor" class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor"> <property name="corePoolSize" value="10" /...

weixin_37460672的博客 1978

Open3D(C++) 点云构建三维Delaunay三角剖分

C++版本的Open3D实现从点云构建三维Delaunay,可视化效果。

点云侠的博客 2247

学 Simulink——基于递推最小二乘法(RLS)的工业电机转动惯量 J在线辨识仿真

Te 估算 = 1.5·p·(ψ·iq + (Ld-Lq)·id·iq)回归量:φ(k)=−ω˙(k), y(k)=Te​(k), θ=J。仿真:电机加速 0→1500rpm,观测 J^(k)→Jnom​。(可选) Jtrue​切 0.04(双惯量负载)→ 看跟踪。电机机械运动方程:Te​−TL​=J⋅ω˙+B⋅ω。J^(0)=0.005→收敛至0.02kg⋅m2✔。Te​:电磁转矩(Nm),已知(来自电流环输出)仅需 Te​,ω(驱动器已有)→ 无额外传感 ✔。

amy_mhd的博客 45

并发编程经历:线程池的使用

线程池的使用 使用线程池管理线程可以最大程度的利用线程,节省资源消耗,它通过利用已有的线程多次循环执行多个任务从而提高系统的处理能力。 我们可以通过java.util.concurrent.ThreadPoolExecutor类来创建线程池,一个任务通过execute(Runnable)方法被添加到线程池,任务就是一个Runnable类型的对象,任务的执行方法就是Runnable类型对象的...

yjclsx的博客 42万+

YOLOv8剪枝 稀疏训练+slim剪枝测试精度仅掉1.6个点,速度提高10.3fps!

摘要 本文介绍了YOLOv8剪枝方法Slim(Network Slimming),通过L1正则化作用于BN层的缩放因子(γ),自动识别并剪除冗余通道,实现模型轻量化。核心步骤包括:稀疏训练(引入L1正则化)、通道剪枝(按γ阈值裁剪)、微调恢复精度。实验表明,该方法能有效压缩模型大小、减少计算量,且支持通过调整speed_up等超参数控制剪枝强度。移植代码需修改C2F模块以适配剪枝,并配置稀疏训练参数(如reg、sl_epochs)。最终剪枝模型需移除优化器以减小体积,但不支持多卡训练。

FJN110的博客 859

【ThreadPoolTaskExecutor】 SpringBoot 的线程池的使用

一、配置 ThreadPoolTaskExecutor 创建一个文件夹 config ,新建一个类 ThreadPoolConfig.java import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor

piano_diano的博客 4143

从一只龙虾到一支团队:OpenClaw 单 Bot 多 Agent 配置实践

单 Bot 多 Agent只有一个对外的聊天入口(飞书 Bot)内部有多个独立的 AI Agent,各司其职主 Agent(总指挥)负责接收任务并分配给子 Agent子 Agent 完成任务后将结果返回给主 Agent角色Agent ID职责使用场景🎯 总指挥main-agent统筹协调,任务分发接收所有用户请求✍️ 笔杆子内容创作公众号、博客、小红书🔬 参谋canmou深度研究竞品分析、市场调研📋 运营官operations运营管理邮件、日历、社交媒体。

Maynor的博客 1080

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

线程池的创建及工作原理和Executor框架

详解线程池,以及真实项目中的案例介绍!!!

愿你我都能实现自己的梦想 2463

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

为什么要使用ThreadPoolTaskExecutor线程处理类

在JUC(java.util.concurrent)包中为我们提供了Executors的静态方法创建几种不同的线程池来使用: 源码中: /** 创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程。 */ public static ExecutorService newCachedThreadPool() { return new ThreadPoolExecutor(0, Integer.MAX_VALUE,

qq_41923982的博客 3765

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

Spring的线程池ThreadPoolTaskExecutor

我们先瞄一眼源码: corePoolSize = 1; int maxPoolSize = 2147483647; 这...不适合我,我要自己一定覆盖怎么做? ** * @author Lxq * @version 1.0 * @date 2020/10/15 15:21 */ @Configurable public class ThreadPoolTaskExecutorConfig { @Bean public ThreadPoolTaskExecutor tas

weixin_38982591的博客 2082

ThreadPoolTaskExecutor和ThreadPoolExecutor

注意:关系3是针对的有界队列,无界队列永远都不会满,所以只有前2种关系。

wukong3158的博客 1879

Java 创建线程池的几种方式

java线程池创建的几种方式和运用

精神小牛马 7807

java线程池整理详解

Java线程池是一种管理和复用线程的机制,用于提高应用程序的性能和资源利用率。它可以有效地控制线程的数量,减少线程创建和销毁的开销,是池化思想的一种体现,预先创建和管理一组线程即“池”。1.在线程池执行的流程中为什么是等任务队列满了后,才创建新的线程,而不是核心线程被用完后,就立马创建新线程执行任务?资源管理:创建线程是一个相对昂贵的操作,过多的线程会消耗系统资源(如内存和CPU)。通过限制线程的创建,可以避免因线程过多而导致的系统性能下降。负载控制。

weixin_43582896的博客 1245

Spring线程池ThreadPoolTaskExecutor 的配置与使用

有关Java线程池,可参见csdn线程池 线程池的配置 <!-- 异步线程池 --> <bean id="taskExecutor" class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor"> <!-- 核心线程数 --> <p...

hynkoala的博客 3302

springboot线程池ThreadPoolTaskExecutor使用

线程池 ThreadPoolTaskExecutor 配置核心线程数,最大线程数,队列大小,线程前缀。运行状况打印:已经提交的任务,完成的,正在处理的,还剩多少个任务

qq120631157的博客 1937

Spring线程池 ThreadPoolTaskExecutor 处理异步任务 小总结

基于Springboot获取ThreadPoolTaskExecutor 1.创建一个类,加载获取ThreadPoolTaskExecutor ; @EnableAsync @Configuration public class AsyncTask { /** * 线程池维护线程的最小数量 */ private final int corePoolSi...

MamboTango的博客 948

CompletableFuture指定ThreadPoolTaskExecutor自定义线程池

CompletableFuture指定ThreadPoolTaskExecutor自定义线程池 前言 用的是springboot 二、使用步骤 1.创建自定义线程池 代码如下: @Configuration public class asyncTaskExecutorConfig { //阻塞队列 private static final int workQueue = 20; //线程空闲后的存活时长 private static final int keepAliveTime

ALiangXiu的博客 9161
上一篇: rocketmq
stringexists
博客等级 码龄9年 2粉丝 12原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值