springboot项目如何引入线程池

springboot使用线程池的实际应用(一) 具体来说,假设我们有10个用户同时调用了这个方法,那么这个方法会被执行10次,但是这10个用户会共用一个线程池中的线程去执行查询操作,而且查询操作是异步执行的,所以并不会阻塞当前线程。在这个过程中,如果线程池中的线程数量还没有达到10个,那么这个30个查询操作中的前10个会被分配到10个线程中执行,剩下的20个查询操作会被存储在工作队列中。其实正确的表述应该是“查询结果中的30个用户数据会被放入工作队列中等待处理”,也就是说,我们将查询操作获取到的结果数据放入一个队列中,然后使用线程池来处理这些数据。 阅读详情

1.在您的application.properties或application.yml文件中,添加以下配置:

task:
  thread:
    pool:
      commonThreadPoolProperties:
        name: TaskExecutor-
        corePoolSize: 10
        maxPoolSize: 30
        keepAliveSeconds: 60
        queueCapacity: 8

2.设置线程配置类

@Data
@Component
@RefreshScope
@NoArgsConstructor
@AllArgsConstructor
@ConfigurationProperties(prefix = "task.thread.pool")
public class TaskThreadPoolConfig {
    TaskThreadPoolProperties commonThreadPoolProperties;
}

3.初始化线程池

@Configuration
@EnableAsync
@EnableScheduling
public class TaskExecutorConfig extends AsyncConfigurerSupport implements SchedulingConfigurer {
@Autowired
    protected TaskThreadPoolConfig taskThreadPoolConfig;
    @Autowired
    protected BeanFactory beanFactory;

    @Bean("taskExecutor")
    public Executor taskExecutor() {
        return createExecutor(taskThreadPoolConfig.getCommonThreadPoolProperties(), beanFactory);
    }

    protected LazyTraceExecutor createExecutor(TaskThreadPoolProperties taskThreadPoolProperties, BeanFactory beanFactory) {
        ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
        //此方法返回可用处理器的虚拟机的最大数量; 不小于1
        //设置核心线程数
        executor.setCorePoolSize(taskThreadPoolProperties.getCorePoolSize());
        //设置最大线程数
        executor.setMaxPoolSize(taskThreadPoolProperties.getMaxPoolSize());
        //除核心线程外的线程存活时间
        executor.setKeepAliveSeconds(taskThreadPoolProperties.getKeepAliveSeconds());
        //如果传入值大于0,底层队列使用的是LinkedBlockingQueue,否则默认使用SynchronousQueue
        executor.setQueueCapacity(taskThreadPoolProperties.getQueueCapacity());
        //线程名称前缀
        executor.setThreadNamePrefix(taskThreadPoolProperties.getName());
        //设置拒绝策略
        executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
        executor.initialize();
        return new LazyTraceExecutor(this.beanFactory, executor);
    }
}

4.使用线程池

@Component
@Slf4j
public class PushConsumerTask {
    @Resource(name = "taskExecutor")
    private Executor taskExecutor;


    public BaseResponse<Void> computeDriverStar() {


        taskExecutor.execute(() -> {
            //todo
        });

        return OrderResponseBuilder.buildSuccess();
    }

}

spring boot中一般如何使用线程池 本文将详细阐述如何在Spring Boot中正确使用线程池,包括配置参数、实例化、任务提交、监控及常见问题处理等环节,并辅以代码示例,以期为开发者提供一份全面的实践指南。​,配置核心参数,正确提交任务,并借助监控工具持续观察与调整,可以显著提升应用的并发处理能力与资源利用率。线程池是一种基于池化技术管理线程的机制,其核心目标在于减少线程创建与销毁的开销,通过复用已创建的线程来处理一系列异步任务。​​是实现线程池的基础类,而Spring Boot则通过封装​。​等组件,简化了线程池的配置和使用。 阅读详情

相关推荐

5步教你轻松搞定 SpringBoot 中引入线程池+Queue缓冲队列实现高并发下单业务

通过以上五个步骤的详细讲解,相信你已经掌握了如何在 SpringBoot 项目中引入线程池和队列来实现高并发下单业务的方法。无论是处理大量订单请求、提高系统性能,还是优化用户体验,这个技巧都能大大提升你的开发效率和应用的稳定性。如果你有任何问题或建议,欢迎在评论区留言交流,我们一起学习,共同进步!💬🌟希望这篇文章对你有所帮助,祝你在编程的道路上越走越远!🚀。

java专栏 2021

【并发编程】SpringBoot创建线程池的六种方式

* 优点:可以自定义参数*

C3Stones 7276

基于pytest+Allure+Python+CANoe的汽车诊断自动化测试框架搭建实战

自动化测试是提升软件质量和研发效率的关键技术,其核心原理是通过脚本模拟人工操作,实现测试用例的自动执行与结果验证。在汽车电子领域,诊断服务测试是确保车辆ECU(电子控制单元)功能正常的重要环节,传统手动测试在面对海量用例和频繁回归时效率低下。本文聚焦于如何利用Python的pytest测试框架、Allure报告工具以及Excel数据驱动,构建一个与Vector CANoe仿真测试环境深度集成的自动化测试解决方案。该方案通过Python调用CANoe的COM接口,实现了诊断报文的自动发送与响应验证,并结合Al

weixin_30384217的博客 680

SpringBoot使用线程池

SpringBoot使用线程池 软件环境 名称 版本号 jdk 1.8 springboot 2.1.6 maven 3.3.9 1.Java中创建线程池 只会介绍java中线程池的核心类ThreadPoolExecutor,其他用法请自行查询 1.1 ThreadPoolExecutor类介绍 jdk1.8 源码 删减部分内容 package java...

Cain的博客 2万+

PSIM仿真实战:反激电源从设计到调试的完整流程(附短路保护配置)

本文详细介绍了使用PSIM仿真工具进行反激电源从设计到调试的完整流程,包括变压器参数设计、功率器件选型、动态特性调试以及短路保护配置。通过实战案例和仿真技巧,帮助工程师提前暴露并解决设计中的常见问题,如负载突变、输入电压波动和短路保护失效等,显著降低硬件试错成本。

weixin_29216353的博客 244

IDEA出现闪退或打不开的解决方法

本身项目比较大,为了打开这个软件,可调节IDEA中安装的bin目录下有个。打开IDEA的时候过一会便闪退,可以再IDEA的右下角看到如下提示。(如果没有该提示,软件右下角也会有个红色感叹号,点开查看原因即可)闪退的多数原因大致是out of memory,内存溢出。查看任务管理器中的进程:(发现内存随时有溢出的情况)但也需要注意,该参数并不是越大越好,适中即可。只有个别原因是需要管理员权限就可执行!可以尽量减少软件的启动。

码农研究僧的博客 5944

springboot 线程池

springboot 线程池

PurineKing之博客 1万+

Java调用OpenDDS(2)-理解OpenDDS自带的Messager示例

理解Messenger

zhangzl419 1660

【SpringBoot+MyBatis-plus+Druid】在SpringBoot+MyBatis-plus项目中引入Druid线程池

引入Druid所需要的依赖: <dependency> <groupId>com.alibaba</groupId> <artifactId>druid-spring-boot-starter</artifactId> <version>1.1.18</version> </depe...

qgnczmnmn的博客 1217

仿真学习系列(四十二):Sigrity仿真之走线阻抗和耦合检查

在高速电路设计中,走线的阻抗和信号线之间的耦合是影响信号完整性的重要因素。设计中可能会出现多种情况,导致阻抗变化或不匹配,例如线宽的变化、跨层分割等。传统的人工检查方法常常不够高效且易忽视细节。借助仿真软件,可以快速定位问题区域,并进行精确分析,从而有效避免或减少信号反射和串扰带来的影响。

案例文章,高速信号 425

RT-DETR改进策略【Neck】| GFPN 超越BiFPN 通过跳层连接和跨尺度连接改进RT-DETR颈部网络

本文记录的是利用颈部结构优化RT-DETR的目标检测网络模型。利用改进后的颈部网络,通过跳层连接,避免了在进行反向传播时的梯度消失问题,并且引入跨尺度连接,可以实现不同级别和层次的特征充分融合,获取足够的高层语义信息和低层空间信息交换,从而在大规模变化场景下提高检测性能。GIRAFFEDET: A HEAVY-NECK PARADIGM FOR OBJECT DETECTION-GFPN包含了上述的跳层连接(dense-link和log2nlog _{2} nlog2​n-link)以及跨尺度连接(Quee

Limiiiing的博客 2229

[开源项目]可观测、易使用的SpringBoot线程池

在开发spring boot应用服务的时候,难免会使用到异步任务及线程池。spring boot的线程池是可以自定义的,所以我们经常会在项目里面看到类似于下面这样的代码),方便集成到Spring Boot项目里面去。。需要说明的是:zimug-monitor-threadpool并未改变SpringBoot线程池的实现,只是在其基础上添加了初始化阶段的配置自动化加载,运行时的状态监控。所以任何有关Spring Boot线程池运行时性能的讨论,都与本文及其实现无关。...

字母哥博客 1273

【GRASS GIS零基础入门教程】2.1:初识GRASS GIS软件

GRASS GIS是一个强大的计算引擎,用于栅格、矢量和地理空间处理。它支持地形和生态系统建模、水文、数据管理和图像处理。通过内置的时态框架和Python API,它可以进行高级时间序列分析和快速地理空间编程,并针对各种硬件配置的大规模分析进行优化。

智慧空间实验室 848

SpringBoot 发送邮件

目录引入jar包配置邮件发送方测试发送简单邮件发送模板邮件主要方法sendWithHTMLTemplate说明使用异步线程发送邮件具体代码请参考GitHub项目 引入jar包 <!-- SpringBoot邮件starter --> <dependency> <groupId>org.springframework.boot</groupId> ...

hrt的博客 347

【Windows Server 2019】DNS服务器的配置与管理——DNS正向解析

博文介绍了如何使用正向解析区,包括创建和添加并验证,以及术语 主机记录,别名,邮件交换记录的解释。

VMware, Windows, Linux, Cisco, Container, Kubernetes, Kali 1万+

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

SpringBoot--@Async注解使用 及线程池简单配置

文章目录环境配置相关依赖具体使用demo 环境配置 IDEA:IntelliJ IDEA 2020.1 (Community Edition) SpringBoot:SpringBoot2.3.2 相关依赖 spring-context-5.2.8.RELEASE.jar --> org.springframework.boot:spring-boot:2.3.2.RELEASE --> org.springframework.boot:spring-boot-starter:2.3.2.RE

lj6682335的博客 1338

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

springboot中怎么引入netty

springboot中集成netty,解决注入Bean空的问题

qq_44980517的博客 1074

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

线程池ThreadPoolExecutor整合Springboot使用

pom.xml 为了在application.properties自定义的配置有提示 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-configuration-processor</artifactId> <optional>tru

qq_35310348的博客 2451

springboot项目中进行并发测试

springboot项目中进行并发测试 一 利用工具包: <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-te...

maxchenBug的博客 6107

Flowable01SpringBoot项目的引入--------------------每天都会更新,自学中

来到这的人想必已经知道flowable的作用以及用途,下面就直接解释如何在springboot中引入flowable并进行一系列的操作。启动之后我们就会发现数据库中多了60多张表,flowable就是使用这些表完成业务操作的。这样我们项目中就已经初步引入flowable。1、首先引入依赖(根据你的boot版本3选择7,boot2选择6)我这里是boot3。第二篇文章介绍这些表具体有什么作用,核心表是那些。可以关注一下本系列,持续追踪一下。2、修改配置文件yml,添加内容。3、配置线程池,创建一个类。

CodeTom的博客 841

(十七)ATP应用测试平台——自定义实现一个springboot2的线程池启动器starter

启动器是springboot的一大特点,我们可以根据项目自身需求按需装配我们的组件。例如我们需要操作redis,项目中可以添加一个redis的启动器spring-boot-starter-data-redis,这样redis的一些客户端操作功能我们就集成好了,不用在繁琐的集成redis客户端的依赖,启动器会帮我们加载一切我们所需要的包。既然这么方便,那么我们如何定制自己的项目启动器呢?请看下文。。。

厉害哥哥的博客 622

(redis错误)Error creating bean with name ‘stringRedisTemplate‘ defined in class path resource

问题: springboot2 配置RedisTemplate 后,启动报错创建 stringRedisTemplate/redisTemplate异常 报错内容 org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'homeController': Injection of resource dependencies failed; nested exception is org

Resst的博客 2785

Error creating bean with name ‘stringRedisTemplate‘ defined in class path re

Caused by: java.lang.ClassNotFoundException: org.apache.commons.pool2.impl.GenericObjectPoolConfig at java.net.URLClassLoader.findClass(URLClassLoader.java:381) ~[na:1.8.0_101] at java.lang.ClassLoader.loadClass(ClassLoader.java:424) ~[na:1.8.0_101] at

闲言 811

spring boot redis->线程池->消息队列->线程池

spring boot redis->线程池->消息队列->线程池 好久没写博客,看起来这个习惯还是很难轻易养成啊! 为了适配我在网上找的一个前端项目的数据格式,我给我原本的model 类Post的属性String imgUrl改为了List imgUrls,按照常规思路,肯定就是新建一个表来存储imgUrlds,不过这很不优雅不是吗?想我当初为什么弃更强大的xml不用,偏要用注解来select数据,不就是因为注解更优雅吗?可是我弄了这个,不是反倒更不优雅。 所以怎么办呢?我想到了re

iUcool的博客 1451

SpringBoot + Prometheus + Grafana 打造可视化监控

依赖--grafana+prometheus必须依赖 开始--> < dependency > < groupId > org.springframework.boot < artifactId > spring-boot-starter-actuator

LuckFairyLuckBaby的博客 1402

一个SpringBoot 项目能处理多少请求?

这篇文章是基于“一个 SpringBoot 项目能同时处理多少请求?”这个面试题出发的。但是经过我们前面简单的分析,你也知道,这个问题如果在没有加一些特定的前提条件的情况下,答案是各不一样的。比如我再给你举一个例子,还是我们的 Demo,只是使用一下 @Async 注解,其他什么都不变:再次启动项目,发起访问,日志输出变成了这样:同时能处理的请求,直接从 Tomcat 的默认 200 个变成了 8 个?因为 @Async 注解对应的线程池,默认的核心线程数是 8。之前写过这篇文章。

weixin_42029738的博客 175
上一篇: python分页爬取es日志,获取数据
下一篇: 基于shardingsphere实现分库分表
bxp1321
博客等级 码龄17年 146粉丝 86原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值