iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >springboot创建线程池的两种方式小结
  • 426
分享到

springboot创建线程池的两种方式小结

2024-04-02 19:04:59 426人浏览 泡泡鱼

Python 官方文档:入门教程 => 点击学习

摘要

目录SpringBoot创建线程池两种方式1.使用static代码块创建2.使用@Configuration @bean注解,程序启动时创建springboot如何开启线程池定义线程

springboot创建线程池两种方式

1.使用static代码块创建

这样的方式创建的好处是当代码用到线程池的时候才会初始化核心线程数

具体代码如下:


public class HttpapiThreadPool {
 
 static int cpuNums = Runtime.getRuntime().availableProcessors();
 
 private static int corePoolSize = 10;
 
 private static int maximumPoolSize = cpuNums * 5; 
 public static ExecutorService httpApiThreadPool = null; 
 
 
 static{
  System.out.println("创建线程数:"+corePoolSize+",最大线程数:"+maximumPoolSize);
  //建立10个核心线程,线程请求个数超过20,则进入队列等待
  httpApiThreadPool = new ThreadPoolExecutor(corePoolSize, maximumPoolSize, 0L,
  TimeUnit.MILLISECONDS, new ArrayBlockingQueue<Runnable>(100),new ThreadFactoryBuilder().setNameFORMat("PROS-%d").build());
 } 
}

使用方法


 public static void main(String[] args) {
  HttpApiThreadPool.httpApiThreadPool.execute(()->System.out.println("测试"));
 }

注意:

1.不能使用Executors的方法创建线程池,这个是大量的生产事故得出来的结论

2.maximumPoolSize本程序使用的是cup数的5倍,你可以看你实际情况用

3.new ThreadFactoryBuilder().setNameFormat("PROS-%d").build() 给每个线程已名字,可以方便调试

2.使用@Configuration @bean注解,程序启动时创建


@Configuration
public class TreadPoolConfig {
 private Logger logger = LoggerFactory.getLogger(TreadPoolConfig.class);
 
 int cpuNums = Runtime.getRuntime().availableProcessors();
 
 private  int corePoolSize = 10;
 
 private  int maximumPoolSize = cpuNums * 5;
 
    
    @Bean(value = "httpApiThreadPool")
    public ExecutorService buildHttpApiThreadPool(){
     logger.info("TreadPoolConfig创建线程数:"+corePoolSize+",最大线程数:"+maximumPoolSize);
        ExecutorService pool = new ThreadPoolExecutor(corePoolSize, maximumPoolSize, 0L,
 TimeUnit.MILLISECONDS, new ArrayBlockingQueue<Runnable>(100),new ThreadFactoryBuilder().setNameFormat("PROS-%d").build()); 
        return pool ;
 } 
}

使用方法


   //注入
    @Resource
 private TreadPoolConfig treadPoolConfig;
   //调用 
   public void test() {
  treadPoolConfig.buildHttpApiThreadPool().execute(()->System.out.println("tre"));
 }

现在两种线程池的创建方法已经介绍完了。

springboot如何开启线程池

定义线程池

定义的位置,要在启动类的子包或者同级目录中


import lombok.Data;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
import java.util.concurrent.ThreadPoolExecutor;
@Data
@Configuration
@EnableAsync //开启异步请求
public class ThreadPoolConfig {
  
    private static final int corePoolSize = 10;   // 核心线程数(默认线程数)
    private static final int maxPoolSize = 100;   // 最大线程数
    private static final int keepAliveTime = 10;  // 允许线程空闲时间(单位:默认为秒)
    private static final int queueCapacity = 500; // 缓冲队列数
    
    @Bean("taskExecutor")
    public ThreadPoolTaskExecutor taskExecutor(){
        ThreadPoolTaskExecutor pool = new ThreadPoolTaskExecutor();
        pool.setThreadNamePrefix("--------------全局线程池-----------------");
        pool.setCorePoolSize(corePoolSize);
        pool.setMaxPoolSize(maxPoolSize);
        pool.seTKEepAliveSeconds(keepAliveTime);
        pool.setQueueCapacity(queueCapacity);
        // 直接在execute方法的调用线程中运行
        pool.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
        // 初始化
        pool.initialize();
        return pool;
    }
}

使用

直接在需要异步执行的方法上加注解


@Async("taskExecutor")

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。

--结束END--

本文标题: springboot创建线程池的两种方式小结

本文链接: https://www.lsjlt.com/news/161153.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • springboot创建线程池的两种方式小结
    目录springboot创建线程池两种方式1.使用static代码块创建2.使用@Configuration @bean注解,程序启动时创建springboot如何开启线程池定义线程...
    99+
    2024-04-02
  • java实现/创建线程的几种方式小结
    进程与线程 进程可以简单理解成一个可执行程序例如.exe,在Windows中的任务管理器中可以查看每一个进程,进程是一次程序的执行,是程序在数据集合上运行的过程,是系统资源调度的一...
    99+
    2024-04-02
  • Java线程协作的两种方式小结
    目录为什么线程之间需要协作介绍方法一方法二为什么线程之间需要协作 线程之间相互配合,完成某项工作,比如:一个线程修改了一个对象的值,而另一个线程感知到了变化,然后进行相应的操作,整个...
    99+
    2023-05-19
    Java线程协作
  • Java线程创建的四种方式总结
    多线程的创建,方式一:继承于Thread类 1.创建一个继承于Thread类的子类 2.重写Thread类的run()--->将此线程执行的操作声明在run()中 3.创建Th...
    99+
    2024-04-02
  • java创建线程池一共有七种方式
    java创建线程池一共有七种方式 这 7 种实现方法分别是: Executors.newFixedThreadPool:创建一个固定大小的线程池,可控制并发的线程数,超出的线程会在队列中等待。 Exe...
    99+
    2023-09-13
    java 开发语言
  • SpringBoot中使用Servlet的两种方式小结
    目录1.方式一(使用注解)2.方式二(定义配置类)1.方式一(使用注解) 首先,我们写一个Servlet。要求就是简单的打印一句话。 在MyServlet这个类的上方使用 @WebS...
    99+
    2024-04-02
  • springboot如何创建线程池
    这篇文章主要介绍springboot如何创建线程池,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!springboot创建线程池两种方式1.使用static代码块创建这样的方式创建的好处是当代码用到线程池的时候才会初始...
    99+
    2023-06-22
  • java线程池的四种创建方式详细分析
    目录前言1. 线程池2. 创建方式前言 在讲述线程池的前提 先补充一下连接池的定义 连接池是创建和管理一个连接的缓冲池的技术,这些连接准备好被任何需要它们的线程使用 可以看到其连接池...
    99+
    2024-04-02
  • 线程池的创建方式有哪些
    这篇文章主要讲解了“线程池的创建方式有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“线程池的创建方式有哪些”吧!什么是线程池线程池(ThreadPool...
    99+
    2024-04-02
  • SpringBoot中处理日期的两种方式小结
    目录方式一: 使用注解 (不推荐)方式二 自定义消息转换器在Spring Boot中,我们通常会使用Jackson来序列化和反序列化Java对象到JSON。在进行日期序列化时,我们需...
    99+
    2023-05-16
    SpringBoot 处理日期 SpringBoot 日期处理
  • SpringBoot 项目中创建线程池
     前言: 前两天做项目的时候,想提高一下插入表的性能优化,因为是两张表,先插旧的表,紧接着插新的表,一万多条数据就有点慢了 后面就想到了线程池ThreadPoolExecu...
    99+
    2024-04-02
  • IDEA创建Vue项目的两种方式总结
    目录安装好Vue运行环境1、下载安装Node.js2、安装打包工具webpack创建Vue项目1、命令行方式(推荐)2、使用Vue模板总结安装好Vue运行环境 1、下载安装Node....
    99+
    2023-05-14
    IDEA创建Vue项目 IDEA创建Vue IDEA创建Vue方式
  • java创建线程的两种方法区别
    在Java中创建一个线程有两种方法:继承Thread类和实现Runnable接口。下面通过两个例子来分析两者的区别:1)继承Thread类public class TestThread extends Thread { int count...
    99+
    2023-05-31
    java 创建线程 ava
  • Go实现线程池的两种方式是什么
    这篇“Go实现线程池的两种方式是什么”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Go实现线程池的两种方式是什么”文章吧。w...
    99+
    2023-06-30
  • Java线程的三种创建方式
    目录1、Thread2、Runnable和Thread3、Runnable和Thread4、三者对比5、注意项1、Thread 继承Thread类,并重写run方法 class ...
    99+
    2024-04-02
  • Android创建线程池的方式有哪些
    在Android中,可以使用以下方式创建线程池:1. 使用ThreadPoolExecutor类:可以通过new ThreadPoo...
    99+
    2023-10-18
    Android
  • eclipse创建springboot项目的三种方式总结
    目录方法一安装STS插件新建spring boot项目项目启动方法二1.创建Maven项目2.选择项目类型3.选择项目4.编写项目组和名称-finish即可5.修改pom.xml文件...
    99+
    2024-04-02
  • Go实现线程池(工作池)的两种方式实例详解
    worker pool简介 worker pool其实就是线程池thread pool。对于go来说,直接使用的是goroutine而非线程,不过这里仍然以线程来解释线程池。 在线程...
    99+
    2024-04-02
  • java中线程池创建的方式有哪些
    本篇文章为大家展示了java中线程池创建的方式有哪些,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。Java可以用来干什么Java主要应用于:1. web开发;2. Android开发;3. 客户端开...
    99+
    2023-06-14
  • Java 中创建线程的几种方式
    Java 是一种面向对象的编程语言,它支持多线程编程。多线程编程是指在一个程序中同时运行多个线程,这些线程可以并行执行,以提高程序的效率和性能。Java 提供了多种创建线程的方法,本文将介绍这些方法以...
    99+
    2023-09-13
    java jvm servlet
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作