springboot如何创建线程池
发表于:2025-02-09 作者:千家信息网编辑
千家信息网最后更新 2025年02月09日,这篇文章主要介绍springboot如何创建线程池,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!springboot创建线程池两种方式1.使用static代码块创建这样的方式创
千家信息网最后更新 2025年02月09日springboot如何创建线程池
这篇文章主要介绍springboot如何创建线程池,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!
springboot创建线程池两种方式
1.使用static代码块创建
这样的方式创建的好处是当代码用到线程池的时候才会初始化核心线程数
具体代码如下:
public class HttpApiThreadPool { /** 获取当前系统的CPU 数目*/ 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(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注解,程序启动时创建
@Configurationpublic class TreadPoolConfig { private Logger logger = LoggerFactory.getLogger(TreadPoolConfig.class); /** 获取当前系统的CPU 数目*/ int cpuNums = Runtime.getRuntime().availableProcessors(); /** 线程池核心池的大小*/ private int corePoolSize = 10; /** 线程池的最大线程数*/ private int maximumPoolSize = cpuNums * 5; /** * 消费队列线程 * @return */ @Bean(value = "httpApiThreadPool") public ExecutorService buildHttpApiThreadPool(){ logger.info("TreadPoolConfig创建线程数:"+corePoolSize+",最大线程数:"+maximumPoolSize); ExecutorService pool = new ThreadPoolExecutor(corePoolSize, maximumPoolSize, 0L, TimeUnit.MILLISECONDS, new ArrayBlockingQueue(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; // 缓冲队列数 /** * 默认异步线程池 * @return */ @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")
以上是"springboot如何创建线程池"这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注行业资讯频道!
线程
方法
最大
核心
代码
队列
使用方法
内容
大小
数目
方式
注解
程序
篇文章
系统
个数
事故
价值
位置
全局
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
服务器的网络带宽
郑州盛凯网络技术公司
网络安全省察法
帕拓逊网络技术
网络安全大赛哪里看
连云港ios软件开发多少钱
正规网络技术员
根据网络安全法以下说法错误的是
深信服af网络安全
网络安全员工作清单
韩立刚ccna和网络安全
网络安全部署设计方案
怎么登录轻量级服务器
光明区品质网络技术开发工艺
数据库表格基础入门
网络安全教育班队课教案
scopus数据库有哪些
门架数据库
拜登普京网络安全清单
腾讯客服数据库
sql语言打开数据库
数据库中的系统迁移
数据库乱码网页无法显示
云服务器管理端
数据库中的result
java服务器怎么连接手机客户
格雷科技 服务器
想学网络安全怎么入门
斗罗大陆三d游戏怎么选择服务器
搞笑软件开发过程