Spring 线程池应用

spring boot 线程池的应用 应用场景:封装线程池任务执行器:在任务提交时,会将父线程的request_id,带入子线程,用于请求日志跟踪。SpringBootApplication启动类上需要加入注解@EnableAsync或者在配置类上使用。封装线程池任务执行器:在任务提交时,会将父线程的request_id,带入子线程,用于请求日志跟踪。 阅读详情

Spring 线程池应用  

线程池Demo之  ThreadPoolTaskExecutor

    (1)编写测试类

Java代码
import org.springframework.core.task.TaskExecutor;

public class TaskExecutorExample {
private TaskExecutor taskExecutor;
public TaskExecutorExample(TaskExecutor taskExecutor) {    
this.taskExecutor = taskExecutor;  
}
public void printMessages() {    
for(int i = 0; i < 25; i++) {      
taskExecutor.execute(new MessagePrinterTask("Message" + i));    
}  
}
private class MessagePrinterTask implements Runnable {    
private String message;    
public MessagePrinterTask(String message) {      
this.message = message;    
}    
public void run() {      
System.out.println(message);    
}
}
} 

<strong>(2)spring的配置
</strong>Xml代码 
<bean id="taskExecutor" class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor">     
    <property name="corePoolSize" value="5" />     
    <property name="maxPoolSize" value="10" />     
    <property name="queueCapacity" value="25" />  
</bean>  
<bean id="taskExecutorExample" class="powercn.TaskExecutorExample">    
    <constructor-arg ref="taskExecutor" />  
</bean>  
<span style="font-family:Georgia;font-size:12px;line-height: 22px;">线程池类为 java.util.concurrent.ThreadPoolExecutor,常用构造方法为:

ThreadPoolExecutor(int corePoolSize, int maximumPoolSize,
long keepAliveTime, TimeUnit unit,
BlockingQueue<Runnable> workQueue,
RejectedExecutionHandler handler)

corePoolSize: 线程池维护线程的最少数量
maximumPoolSize:线程池维护线程的最大数量
keepAliveTime: 线程池维护线程所允许的空闲时间
unit: 线程池维护线程所允许的空闲时间的单位
workQueue: 线程池所使用的缓冲队列
handler: 线程池对拒绝任务的处理策略

一个任务通过 execute(Runnable)方法被添加到线程池,任务就是一个 Runnable类型的对象,任务的执行方法就是 Runnable类型对象的run()方法。

当一个任务通过execute(Runnable)方法欲添加到线程池时:

如果此时线程池中的数量小于corePoolSize,即使线程池中的线程都处于空闲状态,也要创建新的线程来处理被添加的任务。

如果此时线程池中的数量等于 corePoolSize,但是缓冲队列 workQueue未满,那么任务被放入缓冲队列。

如果此时线程池中的数量大于corePoolSize,缓冲队列workQueue满,并且线程池中的数量小于maximumPoolSize,建新的线程来处理被添加的任务。

如果此时线程池中的数量大于corePoolSize,缓冲队列workQueue满,并且线程池中的数量等于maximumPoolSize,那么通过 handler所指定的策略来处理此任务。

也就是:处理任务的优先级为:
核心线程corePoolSize、任务队列workQueue、最大线程maximumPoolSize,如果三者都满了,使用handler处理被拒绝的任务。

当线程池中的线程数量大于 corePoolSize时,如果某线程空闲时间超过keepAliveTime,线程将被终止。这样,线程池可以动态的调整池中的线程数。

unit可选的参数为java.util.concurrent.TimeUnit中的几个静态属性:
NANOSECONDS、MICROSECONDS、MILLISECONDS、SECONDS。

workQueue我常用的是:java.util.concurrent.ArrayBlockingQueue

handler有四个选择:
ThreadPoolExecutor.AbortPolicy()
抛出java.util.concurrent.RejectedExecutionException异常
ThreadPoolExecutor.CallerRunsPolicy()
重试添加当前的任务,他会自动重复调用execute()方法
ThreadPoolExecutor.DiscardOldestPolicy()
抛弃旧的任务
ThreadPoolExecutor.DiscardPolicy()
抛弃当前的任务</span>
 <bean id="taskExecutor"
  class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor"
  scope="singleton" lazy-init="true">
  <property name="corePoolSize" value="${threadpool.corePoolSize}" />
  <property name="queueCapacity" value="${threadpool.queueCapacity}" />
  <property name="maxPoolSize" value="${threadpool.maxPoolSize}" />
  <property name="keepAliveSeconds" value="${threadpool.keepAliveSeconds}" />
  <property name="rejectedExecutionHandler">
   <bean class="${threadpool.rejectedExecutionHandler}" />
  </property>
<!--作用是修改线程的名字-->

  <property name="threadNamePrefix" value="${threadpool.threadNamePrefix}" />
 </bean>
<strong>properties文件:</strong>
threadpool.corePoolSize=5
threadpool.queueCapacity=30
threadpool.maxPoolSize=20
threadpool.keepAliveSeconds=5
threadpool.rejectedExecutionHandler=java.util.concurrent.ThreadPoolExecutor$CallerRunsPolicy
threadpool.threadNamePrefix=myThread

<strong> (3)调用
</strong>Java代码 
ApplicationContext appContext = new ClassPathXmlApplicationContext("applicationContext.xml");    
TaskExecutorExample te = (TaskExecutorExample)appContext.getBean("taskExecutorExample");   
te.printMessages();   
System.out.println("11111111111111111111111");  
<span style="color:#3366ff;"><strong> <span style="color:#000000;"> (4)效果
</span></strong></span><img alt="" src="http://dl.iteye.com/upload/attachment/316620/37c3fd12-508c-3e7a-9e0b-64a2c449c8c2.gif" style="border: 0px; max-width: 100%;" />

 

LangChain4j + Milvus 从0-1实现会话管理与RAG检索的AIChat超详细教程 本教程将介绍如何使用LangChain4j和Milvus向量数据库构建一个具备流式输出、会话管理、会话隔离和基于文档RAG检索能力的AI机器人。我们将使用阿里百炼模型作为LLM后端,并通过Docker部署Milvus向量数据库。创建Assistant接口,定义聊天服务:LangChain4j 中文文档 | LangChain4j 中文文档wiringMode :这个属性一般两种,一种是自动装配,我们这里选择手动配置。 阅读详情

相关推荐

unity人物刚体移动_Unity3D实现2D人物移动-总结篇

背景最近研究Unity3d,2d寻路的实现。所以又一次涉及到了角色坐标位移的问题。系统的对于角色鼠标点击移动这个简单问题进行整理和总结。本来就是一个简单的几何问题,结果发现已经有两个小坑,顺便填上,这里做下总结。实现需求:通过鼠标点击,控制2d角色移动,就是点哪里,角色向移动到哪里问题分解:按照时间进行动画分解,鼠标输入(动画开始)、平移(动画进行)、移动结束(动画结束)前提:这里前面的文章基本解...

weixin_39610366的博客 1274

Spring框架中的线程池

ExecutorService是Java提供的用于管理线程池的高级工具。

m0_71777195的博客 3823

基于AIS动态数据与AI结合得经纬度标示算法

港口船舶智能标注系统 本系统通过结合摄像头视频流和AIS船舶动态数据,利用AI技术实现船舶实时标注功能。系统架构包括视频流处理、AIS数据解析、船舶检测匹配和坐标映射转换等模块。关键技术步骤: AIS数据获取:通过本地接收机或网络API获取船舶位置、航速等信息 AI目标检测:采用YOLOv8等模型识别视频中的船舶 船舶匹配算法:通过位置投影或运动轨迹匹配视频目标与AIS数据 坐标映射:使用相机标定技术将经纬度转换为图像坐标 实时标注:在视频画面上叠加船名、位置等关键信息 应用场景包括港口监控、智能海事管理和

qianbo042311的博客 1807

spring线程池 java_spring-线程池(1)

多线程并发处理起来通常比较麻烦,如果你使用spring容器来管理业务bean,事情就好办了多了。spring封装了java的多线程的实现,你只需要关注于并发事物的流程以及一些并发负载量等特性,具体来说如何使用spring来处理并发事务:1.了解 TaskExecutor接口Spring的 TaskExecutor接口等同于java.util.concurrent.Executor接口。 实际上,它...

weixin_35738834的博客 818

从零开始深入理解 AI Agent(完整版)

AI Agent(智能体)是一个能够自主感知环境、做出决策、执行行动并记忆经验的智能系统。特性传统程序AI Agent决策方式固定逻辑(if-else)动态推理(LLM 思考)灵活性需要重新编程自然语言描述即可能力边界明确限定可通过工具扩展学习能力无可通过记忆积累经验│ 感知 │ ───→ │ 推理 │ ───→ │ 行动 │↑ │ ││ ↓ ││ 记忆 │ ←─── │ 反思 │ ←─────────┘感知(Perception)

qq_20096229的博客 754

别再只会用串口助手了!手把手教你用手机App调试HC-05蓝牙模块(STM32F103实战)

本文详细介绍了如何利用手机App调试HC-05蓝牙模块与STM32F103的无线连接,突破传统串口助手的限制。通过实战指南,开发者可以掌握移动性测试、实时监控和快速验证等高效调试技巧,优化蓝牙透传的稳定性和性能。

weixin_33670786的博客 428

Spring线程池ThreadPoolTaskExecutor的使用

文章目录1 简介2 示例2.1 线程池配置类2.2 异步方法2.3 启动测试 1 简介 Spring 通过任务执行器(TaskExecutor)来实现多线程和并发编程,使用ThreadPoolTaskExecutor实现一个基于线程池的TaskExecutor, 还得需要使用@EnableAsync开启异步,并通过在需要的异步方法那里使用注解@Async声明是一个异步任务 Spring 已经实现的异常线程池: SimpleAsyncTaskExecutor:不是真的线程池,这个类不重用线程,每次调用都会创

上善若泪 5万+

X光安检模型训练第一步:手把手教你处理OPIXray和HIXray这两个小众数据集

本文详细解析了X光安检AI模型训练的关键步骤,重点介绍如何处理OPIXray和HIXray这两个专业数据集。从数据格式转换到YOLO标准,再到数据增强和质量验证,手把手指导开发者高效利用这些数据集进行目标检测模型训练,提升安检场景下的危险物品识别准确率。

weixin_32629853的博客 316

Spring中的线程池ThreadPoolTaskExecutor介绍

前言: Java SE 5.0引入了ThreadPoolExecutor、ScheduledThreadPoolExecutor。Spring 2.x借助ConcurrentTaskExecutor和ThreadPoolTaskExecutor能够通过IoC配置形式自定义它们暴露的各个属性。 多线程并发处理起来通常比较麻烦,如果你使用spring容器来管理业务bean,事情就好办了多了。spr...

weixin_33882452的博客 1002

相场断裂模型中的各向异性机制:从裂纹密度到驱动力的数值实现

断裂力学是研究材料在载荷作用下裂纹萌生与扩展规律的基础学科,其核心在于理解材料失效的能量准则与路径选择。传统方法通常预设裂纹路径,而相场断裂模型通过引入连续的相场变量,将裂纹模拟转化为一个能量最小化问题,能够自发预测裂纹的萌生、扩展与分叉,在工程失效分析中具有重要价值。当材料具有显著的方向依赖性时,如单晶、复合材料或轧制金属板,各向同性假设会失效,此时需引入各向异性机制。该机制的核心在于改造两个关键部分:一是裂纹密度函数,通过引入各向异性张量来定义不同方向上形成裂纹微结构的能量成本;二是临界能量释放率(断裂

weixin_31421613的博客 297

cdk&java | 分子sdf文件生成

sdf

ASKCOS博客 1089

一文了解Spring线程池(超详细+干货满满)

一文了解Spring线程池(超详细+干货满满)

adobe754的博客 2564

手把手教你学Simulink--基础微电网场景实例:基于Simulink的混合交直流微电网架构仿真

本文基于Simulink构建混合交直流微电网仿真模型,通过交流子网(风电+交流负荷)和直流子网(光伏+储能+直流负荷)的协同控制,实现系统效率提升8.5%。重点介绍了混合架构原理、下垂控制策略及Simulink建模方法,包括核心模块实现、协调控制器代码和仿真参数设置。通过三种工况测试验证了系统性能:功率转移响应时间<0.5s,电压波动<5%,显著优于传统独立子网架构。文章还提供了进阶优化方向和完整代码清单,为微电网仿真研究提供实用参考。

MHD0815的博客 129

Spring线程池简介及应用整理

Spring线程池 简单介绍 Spring的TaskExecutor接口等同于java.util.concurrent.Executor接口。 实际上,它存在的主要原因是为了在使用线程池的时候,将对Java 5的依赖抽象出来。 这个接口只有一个方法execute(Runnable task),它根据线程池的语义和配置,来接受一个执行任务。 最初创建TaskExecutor是为了在需要时给其他Spring组件提供一个线程池的抽象。 例如ApplicationEventMulticaster组件、JMS的 Ab

liso00的博客 5517

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

VC中sqlite的使用

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

线程池:spring封装的ThreadPoolTaskExecutor-线程池应用

适用场景: 在要处理大批量且无序 的数据 前提下,可使用下面方案,可提高线上服务器吞吐量。以下有场景以及推荐方案。 1、 test 类: import java.math.BigDecimal; import java.util.Date; import org.junit.Before; import org.junit.Test; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.b

小浪与艳花 1954

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

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

Java基础之线程池及其在Spring Boot中的应用

线程池是Java并发编程的重要组成部分,通过线程池可以有效地管理和利用系统资源。在Spring Boot中,开发者可以通过简单的配置使线程池应用于异步任务和定时任务,极大地提高了应用的性能和可维护性。通过Spring Boot Actuator,还可以方便地监控线程池的运行状态,确保系统的稳定和高效。

weixin_47012044的博客 300

Python支付集成库a2apay详解与实战

支付网关集成是现代电商系统和SaaS平台的核心技术环节,其原理是通过标准化API对接不同支付渠道。Python生态中的a2apay库封装了复杂的签名验证和加密过程,开发者只需关注业务逻辑实现。该技术显著降低了支付系统开发门槛,支持同步/异步调用、批量付款、跨境电商等多场景应用。特别是在处理高并发支付请求时,a2apay的异步接口和连接池配置能有效提升系统性能。热门的跨境电商和订阅支付场景中,该库提供的多币种转换和定期扣款功能尤为实用。通过合理的异常处理和调试模式,可以快速定位支付流程中的各类问题。

weixin_34159110的博客 171

线程池的应用,以及spring中@Async注解的使用与配置

线程池的实际应用

zhengbaohua512的博客 1521

Spring 应用中配置线程池

更多文章欢迎访问个人博客站【 燕归来】   在spring-task.xml核心配置文件中配置,并在Spring的总入口出导入此配置文件,这里只是为了管理方便,当然也可以直接在入口处直接配置。 &lt;import resource="spring-task.xml"/&gt;   在Spring-task.xml文件中装载线程池相关对象内容 &lt;bean id="taskE...

燕归来兮 3651

在spring boot应用监控线程池的状态

转载于: https://blog.youkuaiyun.com/toxie6415176/article/details/80204070 内含多篇博客链接. 今天在公众号中看到了一篇教你如何监控 Java 线程池运行状态&nbsp;,才记起来我之前也做过一样的事情,但是没有记录下来,今天有空记下来。我会首先介绍一下监控的背景,监控方式,实例代码及效果3个部分介绍。背景废话...

忽然也慌了神 5616

Java线程池调优全面指南:原理、实践、Spring Boot应用与面试经验

线程池(Thread Pool)的使用是提高应用性能和资源利用率的关键技术之一。特别是在Spring Boot等现代应用框架中,合理配置和调优线程池对于确保应用的高效运行至关重要。本文将全面探讨Java线程池的原理、核心参数、调优策略、Spring Boot中的应用实践,以及面试中可能遇到的问题和经验分享。

weixin_66924704的博客 830

spring线程池ThreadPoolTaskExecutor应用

1、线程池配置文件 #一般采用properties配置 threadpool.corePoolSize=20 threadpool.maxPoolSize=50 threadpool.queueCapacity=20000 2、spring配置文件 3、java代码中注入线程池 @Autowired

User_xiangpeng的专栏 705

Spring Boot线程池的简单应用

前言 前两天做项目的时候,想提高一下插入表的性能优化,因为是两张表,先插旧的表,紧接着插新的表,一万多条数据就有点慢了 后面就想到了线程池ThreadPoolExecutor,而用的是Spring Boot项目,可以用Spring提供的对ThreadPoolExecutor封装的线程池ThreadPoolTaskExecutor,直接使用注解启用 使用步骤 先创建一个线程池的配置,让Spring Boot加载,用来定义如何创建一个ThreadPoolTaskExecutor,要使用 @Configurati

小学僧的博客 356

Spring Boot 线程池应用与配置

简单的spring boot 线程池应用

之一的博客 1051
上一篇: css美化Div边框的样式实例
下一篇: web.xml中listener的作用及使用(转)
rmnjava
博客等级 码龄20年 8粉丝 5原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值