Springboot中异步线程池怎么配置
发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,Springboot中异步线程池怎么配置,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。配置线程池首先我们需要先编写 启用
千家信息网最后更新 2026年11月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安全错误
数据库的锁怎样保障安全
重生之互联网科技帝国
国智互联网科技
北京互联网科技
以房互联网科技
互联网科技公司有哪些
互联网科技美容
上海卓越科技 互联网
互联网科技有限公司 翻译
互联网科技创新企业排名
互联网 科技馆
云创客互联网科技公司
广州优美互联网科技
互联网科技博主是什么意思
北京大学互联网科技怎么样
玉溪新华互联网科技好不好
工业互联网科技成果转化
神州科技互联网有限公司
吉林省码上互联网科技电话
三亚科技创新互联网基地
北京品多多互联网科技有限公司
贷财互联网科技
互联网科技论坛
科技伦理 互联网公司
互联网科技生活的内容
农村开互联网科技讲堂
科技类公司包括互联网吗
深圳市罗太互联网科技有限公司
爱医互联网络科技
米泉互联网科技专业怎么样
互联网时代高科技布局