springboot项目开启多线程
1. 配置2. 代码实现3. 总结
·
springboot项目开启多线程
1. 配置
开启多线程,首先需要配置一个连接池,为什么需要配置连接池,当数据量大的时候,一个新的线程满足不了系统的要求,但是只有少量的请求可以直接new一个新线程,如下代码。
new Thread(){//少量请求可以这样做
@Override
public void run() {
//TODO异步任务
}
}.start();
1.1 连接池配置
spring:
task:
execution:
pool:
core-size: 8
max-size: 256
keep-alive: 60000
queue-capacity: 256
thread-name-prefix: test
1.2 连接池参数解释
- core-size:核心线程数
- max-size:最大线程数
- keep-alive:空闲线程能存活的最长时间
- queue-capacity:队列最大程度
- thread-name-prefix:线程名
2. 代码实现
2.1 启动类
启动类要加@EnableAsync注解,意思是允许开启异步,如果不加。多线程启动不了。
@EnableAsync
@SpringBootApplication
public class DbpmsApplication {
public static void main(String[] args) {
SpringApplication.run(DbpmsApplication.class, args);
}
}
2.2 service层
controller层就正常调用就行,service层添加对应接口,但是不能有返回值,如果需要返回值需要callback方法。
public interface Test{
void saveObject(String str);
}
2.3 impl
注解不再是@override而是@Async
@Async
public void saveObject(String str){
//打印线程名,看是否开启了多线程
String tName=Thread.currentThread().getName();
System.out.println(entity+"调用的线程名字:"+tName);
//可以在下方添加保存数据库操作
}
2.3 演示
模拟并发调用,同时有四个人调用
@Test
void testMd503() {
sysLogService.saveObject("张三");
sysLogService.saveObject("李四");
sysLogService.saveObject("王五");
sysLogService.saveObject("赵六");
}
结果
每次调用会开启一个线程。
3. 总结
- 少量数据不需要配置线程池,并发量大根据系统的配置来配置线程池
- 开启异步注解必须加上
- 此方法没有返回值,如需返回值需要用callback方式
本文是作者在雷神的教导下完成的
雷神的家
更多推荐
已为社区贡献1条内容
所有评论(0)