Springboot中异步线程池怎么配置
发表于:2025-12-02 作者:千家信息网编辑
千家信息网最后更新 2025年12月02日,Springboot中异步线程池怎么配置,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。配置线程池首先我们需要先编写 启用
千家信息网最后更新 2025年12月02日Springboot中异步线程池怎么配置
Springboot中异步线程池怎么配置,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。
配置线程池
首先我们需要先编写 启用@EnableAsync 的线程池配置类
import java.util.concurrent.Executor;
import java.util.concurrent.ThreadPoolExecutor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
//启动异步
@EnableAsync
//这是一个配置类
@Configuration
class TaskPoolConfig {
//设置Bean的名称不设置的话没有办法在 任务中对应 配置信息
@Bean("taskExecutor")
public Executor taskExecutor() {
//根据ThreadPoolTaskExecutor 创建建线程池
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
//为线程设置初始的线程数量 5条线程
executor.setCorePoolSize(5);
//为线程设置最大的线程数量 10条线程
executor.setMaxPoolSize(10);
//为任务队列设置最大 任务数量
executor.setQueueCapacity(200);
//设置 超出初始化线程的 存在时间为60秒
//也就是 如果现有线程数超过5 则会对超出的空闲线程 设置摧毁时间 也就是60秒
executor.setKeepAliveSeconds(60);
//设置 线程前缀
executor.setThreadNamePrefix("taskExecutor-");
//线程池的饱和策略 我这里设置的是 CallerRunsPolicy 也就是由用调用者所在的线程来执行任务 共有四种
//AbortPolicy:直接抛出异常,这是默认策略;
//CallerRunsPolicy:用调用者所在的线程来执行任务;
//DiscardOldestPolicy:丢弃阻塞队列中靠最前的任务,并执行当前任务;
//DiscardPolicy:直接丢弃任务;
executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
//设置在关闭线程池时是否等待任务完成
executor.setWaitForTasksToCompleteOnShutdown(true);
//设置等待终止的秒数
executor.setAwaitTerminationSeconds(60);
//返回设置完成的线程池
return executor;
}
}
使用线程池的类
在使用线程池的时候我们需在使用线程池的任务方法上面加上@Async注解
import lombok.extern.slf4j.Slf4j;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Component;
//启用log 在控制台输出信息
@Slf4j
//启用@Component 注解将该类注入到spring容器中
@Component
public class test {
//为Hello类方法设置异步调用的配置类
@Async("taskExecutor")
public void Hello(String hello) throws InterruptedException {
//开始执行任务
log.info("任务开始并延长执行时间");
//延迟执行
Thread.sleep(1000);
//执行输出
log.info(hello);
}
}
测试线程池
编写测试线程池的方法这利用的idea 的单元测试
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
@RunWith(SpringRunner.class)
@SpringBootTest
public class ApplicationTests {
//自动装配 线程测试类
@Autowired
private test test;
@Test
public void test() throws Exception {
//循环跑30个任务
for (int i = 0;i<30;i++){
test.Hello("test"+i);
}
}
}
这里需要说一下Spring有自己的线程池 我的这个属于自定义的线程池
同时Spring提供了定时任务调度的注解非常强大 @Scheduled+Cron配置
同时这个定时任务不与线程池发生冲突
看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注行业资讯频道,感谢您对的支持。
线程
任务
配置
测试
也就是
数量
方法
时间
注解
最大
信息
同时
所在
用者
策略
这是
队列
帮助
输出
强大
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
世纪风互联网科技
双报到网络安全进社区
广州酷点网络技术有限公司
cmd登录数据库改密码
数据库直接导入数据安全吗
数据库鄙视链
网络安全知识竞赛分数
西安网络技术有限公司
菲讯斯软件开发
软件开发及信息服务行业分析
锐捷网络安全产品事业部
数据库查询通配符
软件开发团队激励方法
无法找到服务器或dns
王牌战争有衣服如何带进服务器中
江西省振兴杯网络安全
未转变者修改服务器倍数
电脑远程服务器有问题是怎么了
网络中心服务器地址
pda无线连接数据库
2017年政府网站网络安全
关于网络安全的小品五个人
易语言 数据库 插入
网络安全社会工程防护手册
数据库防水坝系统
智能网络安全风险评估技术
中国软件开发市场前景
软件开发沟通计划书
数据库连接使用连接池的好处
高中网络技术应用简答题