首页 > 其他分享 >一看就懂,小白也会配置线程池了;SpringBoot简单配置线程池,

一看就懂,小白也会配置线程池了;SpringBoot简单配置线程池,

时间:2024-06-13 11:59:31浏览次数:19  
标签:SpringBoot 配置 dev 线程 private new pool

线程池是Java实现并发的第一步,以下在SpringBoot中配置线程池的步骤,简单易学,小白也可以配置。

编写一个类,实例化线程池的数学参数:包括核心线程数、最大线程数、允许挂载时间、阻塞队列数: 

//线程池的几个整数的参数,用到配置文件application.yml和dev配合一起配置;
// 在application.yml中别忘了active: dev 激活application-dev.yml配置文件
@Component
@ConfigurationProperties(prefix = "thread.pool")
@Data
public class ThreadPoolProperties {
    private Integer corePoolSize;//核心线程池数
    private Integer maximumPoolSize;//最大线程数
    private Integer keepAliveTime;//秒
    private Integer queue;//允许排队的队列数,程序阻塞数
}

appliaction.yaml和dev参数:

#线程池属性的配置
thread:
  pool:
    corePoolSize: ${pool.corePoolSize}
    maximumPoolSize: ${pool.maximumPoolSize}
    keepAliveTime: ${pool.keepAliveTime}
    queue: ${pool.queue}

dev:

#线程池具体参数配置
pool:
  corePoolSize: 2
  maximumPoolSize: 3
  keepAliveTime: 5
  queue: 3

别忘了在application.yml激活dev文件:

spring:
  profiles:
    active: dev

配置线程池Bean:

//配置类
@Configuration
public class Configurations {

    //注入刚刚配置类实例化的线程数学方面的参数类:
    @Autowired
    private ThreadPoolProperties poolProperties;

    @Bean()
    public ThreadPoolExecutor threadPoolExecutor() {
        ThreadPoolExecutor executor = new ThreadPoolExecutor(poolProperties.getCorePoolSize(),//核心线程池数
                poolProperties.getMaximumPoolSize(), //最大线程数
                poolProperties.getKeepAliveTime(), //线程挂载时长
                TimeUnit.SECONDS,//时长单位   (这里用秒)
                new ArrayBlockingQueue<>(poolProperties.getQueue()));//允许排队的队列数,程序阻塞数
                executor.allowCoreThreadTimeOut(true);//挂在时间到了仍然没有程序使用线程就允许线程挂掉。
        return executor;
    }
}

具体使用:测试单元:

注意:测试单元的@Test注解对多线程执行不是很友好;因为在@Test注解下的主程序方法只认主程序的主线程;其他的线程并不照顾到;主线程运行完即挂掉停止程序;为了简单演示;这里用到了线程阻塞;Thread.sleep(3000);即阻塞主线程3秒钟;等待线程池的线程运行完才关闭主线程;

@SpringBootTest
public class Test {
    @Autowired(required = false)
    private InsertBatchMapper insertBatchMapper;
    //注入线程池Bean;
    @Autowired
    private ThreadPoolExecutor threadPoolExecutor;

    @org.junit.jupiter.api.Test
    public void testUmbrella()throws Exception{
        String s="北京";
        threadPoolExecutor.execute(()->{    //线程执行的具体操作:: Lambda写法
            List<UserAuto>list=new ArrayList<>();
            for (int i=0;i<30;i++) {
                UserAuto userAuto = new UserAuto(s,"女",28,38);
                list.add(userAuto);
            }
                insertBatchMapper.insertBatch(list);
        });threadPoolExecutor.execute(()->{   线程执行的具体操作:: Lambda写法
            List<UserAuto>list=new ArrayList<>();
            for (int i=0;i<30;i++) {
                UserAuto userAuto = new UserAuto(s,"女",28,38);
                list.add(userAuto);
            }
                insertBatchMapper.insertBatch(list);
        });threadPoolExecutor.execute(()->{// //线程执行的具体操作:: Lambda写法
            List<UserAuto>list=new ArrayList<>();
            for (int i=0;i<30;i++) {
                UserAuto userAuto = new UserAuto(s,"女",28,38);
                list.add(userAuto);
            }
                insertBatchMapper.insertBatch(list);
        System.out.println("ThreadName:"+Thread.currentThread());
        });threadPoolExecutor.execute(()->{/// //线程执行的具体操作:: Lambda写法
            List<UserAuto>list=new ArrayList<>();
            for (int i=0;i<30;i++) {
                UserAuto userAuto = new UserAuto(s,"女",28,38);
                list.add(userAuto);
            }
                insertBatchMapper.insertBatch(list);
        System.out.println("ThreadName:"+Thread.currentThread());
        });                   ///一共四个任务,

        Thread.sleep(3000);///注意:
        // @Test注解中;主线程运行完即关闭整个程序;并不会等待主程序中其他的线程运行完毕才关闭;
          //而是直接关闭了整个程序;有可能会导致主程序中其他的线程线程还未执行完毕就挂掉整个程序;
         ///为此:在主程序中阻塞等待三秒,确保全部线程全部执行完毕;具体解决方案是编写CountDownLatch进行控制
    }
}

测试结果:

测试结果跟设置好的线程数大致相符:

#线程池具体参数配置
pool:
  corePoolSize: 2
  maximumPoolSize: 3
  keepAliveTime: 5
  queue: 3

标签:SpringBoot,配置,dev,线程,private,new,pool
From: https://blog.csdn.net/m0_70630103/article/details/139649864

相关文章

  • Maven的配置及基本使用
    目录配置Mavenidea集成Maven本地仓库地址远程仓库地址插件的使用官网插件库常用插件推荐JRebel安装使用IDEA常用快捷键其他设置生成javadoc取消更新一、配置Mavenidea集成Maven        Maven的核心程序并不包含具体功能,仅负责宏观调度。具体功能......
  • Apollo(配置管理工具)
    介绍Python读取配置参数通常使用处理yaml,conf配置文件和env环境变量,这种配置方式比较方便本地加载,在微服务分布式部署时对这些配置需要集中管理,并支持热更新则引入了Apollo Apollo(阿波罗) 是一款可靠的分布式配置管理中心,诞生于携程框架研发部,能够集中化管理应用不同环境、不......
  • 探索鸿蒙系统中的OffscreenCanvas并发线程绘制问题
    引言作为一名热衷于鸿蒙系统开发的工程师,我近期遇到了一个关于OffscreenCanvas组件在并发线程中绘制时崩溃的问题。这个问题不仅挑战了我的技术理解,也促使我深入探索鸿蒙系统的内部机制。在这篇文章中,我将分享我的发现和解决问题的过程。问题描述在开发过程中,我尝试使用O......
  • 无人机、无人狗,应该单独配置一款专属的机枪
    无人机和无人狗,现在配置的机枪都是现在已有的型号,这些型号的机枪是为人类使用设计的,虽然也可以搭载到无人设备上,但是性能上总是不会那么完美,最简单的一点就是这个换弹是目前难以实现的,并且射击时的稳定性也是有不足的,因此我认为我国的无人设备应该单独开发几款武器设备。我......
  • Qt - 多线程之线程的开始暂停恢复停止
    示例1在Qt中,可以使用QThread的线程控制功能来暂停和恢复一个线程。这里是一个简单的例子:#include<QThread>#include<QDebug>classWorkerThread:publicQThread{voidrun()override{qDebug()<<"Threadisrunning";//执行一些任务......
  • Springboot计算机毕业设计影院订票选座微信小程序【附源码】开题+论文+mysql+程序+部
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着移动互联网的快速发展,人们的生活方式发生了深刻变化,特别是在娱乐消费领域。电影院作为重要的文化娱乐场所,其订票方式也逐渐从传统的线下购票转向......
  • Springboot计算机毕业设计影院购票微信小程序【附源码】开题+论文+mysql+程序+部署
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景在当今数字化时代,移动互联网的普及率日益提升,智能手机成为人们生活中不可或缺的工具。微信小程序,作为一种轻量级应用,凭借其便捷性和易用性,受到了广大......
  • DevExpress WPF中文教程:Grid - 如何完成列和编辑器配置(设计时)?
    DevExpressWPF拥有120+个控件和库,将帮助您交付满足甚至超出企业需求的高性能业务应用程序。通过DevExpressWPF能创建有着强大互动功能的XAML基础应用程序,这些应用程序专注于当代客户的需求和构建未来新一代支持触摸的解决方案。无论是Office办公软件的衍伸产品,还是以数据为中心......
  • 基于springboot实现小型诊疗预约平台系统项目【项目源码+论文说明】计算机毕业设计
    基于springboot实现小型诊疗预约平台系统的设计演示摘要现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式。本小型诊疗预约平台就是在这样的大环境下诞生,其可以帮助管理者在短时间内处理完毕庞大的数据......
  • Java毕业设计-基于springboot开发的师生健康信息管理系统-毕业论文(附毕设源代码)
    文章目录前言一、毕设成果演示(源代码在文末)二、毕设摘要展示1、开发说明2、需求/流程分析3、系统功能结构三、系统实现展示1、管理员功能模块2、学生功能模块3、教师功能模块四、毕设内容和源代码获取总结Java毕业设计-基于springboot开发的师生健康信息管理系统-毕......