springboot 中如何配置线程池
发表于:2025-01-24 作者:千家信息网编辑
千家信息网最后更新 2025年01月24日,springboot 中如何配置线程池,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。1.添加configimport lombok.ex
千家信息网最后更新 2025年01月24日springboot 中如何配置线程池
springboot 中如何配置线程池,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。
1.添加config
import lombok.extern.slf4j.Slf4j;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.Executor;import java.util.concurrent.ThreadPoolExecutor;@Configuration@EnableAsync@Slf4jpublic class ExecutorConfig { @Bean("taskExecutor") public Executor asyncServiceExecutor() { log.info("---创建线程池---"); ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor(); //核心线程数 executor.setCorePoolSize(10); //最大线程数 executor.setMaxPoolSize(20); //队列大小 executor.setQueueCapacity(200); //配置线程池中的线程的名称前缀 executor.setThreadNamePrefix("async-method-"); /* rejection-policy:当pool已经达到max size的时候,如何处理新任务 线程池对拒绝任务的处理策略:此处采用了CallerRunsPolicy策略, 当线程池没有处理能力的时候,该策略会直接在execute方法的调用线程中运行被拒绝的任务; 如果执行程序已被关闭,则会丢弃该任务 */ executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy()); //设置线程池关闭的时候等待所有任务都完成再继续销毁其他的Bean executor.setWaitForTasksToCompleteOnShutdown(true); //设置线程池中任务的等待时间,如果超过这个时候还没有销毁就强制销毁,以确保应用最后能够被关闭,而不是阻塞住 executor.setAwaitTerminationSeconds(60); //执行初始化 executor.initialize(); return executor; }}
2.定义异步方法
/** * 异步调用测试接口 */public interface IAsyncService { void testAsyncMethod() throws Exception;}@Service@Slf4jpublic class AsyncServiceImpl implements IAsyncService { //此处taskExecutor和 config中@bean保持一致 @Async("taskExecutor") @Override public void testAsyncMethod() throws Exception{ log.info("异步方法,走起---"); long start = System.currentTimeMillis(); Thread.sleep(5000); long end = System.currentTimeMillis(); log.info("异步方法,结束:" + (end - start) + "毫秒"); }}
3.测试
public Result> test() { System.out.println("1====================="); System.out.println("2====================="); try { asyncService.testAsyncMethod(); } catch (Exception e) { e.printStackTrace(); } System.out.println("3====================="); System.out.println("4====================="); return Result.ok("测试成功!"); }
控制台打印如下:
备注:
如果发现启动项目报错:
解决方案:yml中添加配置
spring: main: allow-bean-definition-overriding: true
看完上述内容,你们掌握springboot 中如何配置线程池的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注行业资讯频道,感谢各位的阅读!
线程
任务
方法
配置
时候
策略
测试
内容
更多
问题
处理
最大
一致
成功
束手无策
为此
前缀
原因
名称
备注
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
网络安全靠人民有关资料
软件开发中心招聘
软件开发是交多少钱的税
手机模拟器老是断开服务器
招标网络技术有限公司
怎么看湖南网络安全课
软件开发到日本工作靠谱吗
梦幻新诛仙服务器名字
微程互联网科技
三级网络技术考编程吗
桂阳安卓软件开发培训哪家好
类似于神经网络技术
服务器 刷单
网络安全工程师自学软件
mysql数据库服务名怎么查看
跨平台服务器
双融合服务器
杀毒软件开发范例
网络技术与文化形态的演变
网络安全教育主题ppt
银行 网络安全 竞赛
合肥网络安全大会参与者
ios无法打开移动数据库
湖北省网络安全大赛获奖名单
新华三服务器远程网络管理
从数据库中获取经纬度标注
中国网络技术有限公司的公司电话
管理系统多服务共享数据库
杭州mes软件开发
网络技术基础介绍