springboot主线程_Spring Boot如何优雅的使用多线程实例详解

本文介绍了如何在Spring Boot中利用@Async注解实现多线程,包括无返回值和有返回值的异步方法。通过配置线程池并展示示例代码,详细解析了异步方法的执行过程。最后提到了@Async注解可能失效的几种情况,以及返回值限制。
摘要由CSDN通过智能技术生成

前言

本文带你快速了解@Async注解的用法,包括异步方法无返回值、有返回值,最后总结了@Async注解失效的几个坑。

在 SpringBoot 应用中,经常会遇到在一个接口中,同时做事情1,事情2,事情3,如果同步执行的话,则本次接口时间取决于事情1 2 3执行时间之和;如果三件事同时执行,则本次接口时间取决于事情1 2 3执行时间最长的那个,合理使用多线程,可以大大缩短接口时间。那么在 SpringBoot 应用中如何优雅的使用多线程呢?

Don't bb, show me code.

快速使用

SpringBoot应用中需要添加@EnableAsync注解,来开启异步调用,一般还会配置一个线程池,异步的方法交给特定的线程池完成,如下:

@Configuration

@EnableAsync

public class AsyncConfiguration {

@Bean("doSomethingExecutor")

public Executor doSomethingExecutor() {

ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();

// 核心线程数:线程池创建时候初始化的线程数

executor.setCorePoolSize(10);

// 最大线程数:线程池最大的线程数,只有在缓冲队列满了之后才会申请超过核心线程数的线程

executor.setMaxPoolSize(20);

// 缓冲队列:用来缓冲执行任务的队列

executor.setQueueCapacity(500);

// 允许线程的空闲时间60秒:当超过了核心线程之外的线程在空闲时间到达之后会被销毁

executor.setKeepAliveSeconds(60);

// 线程池名的前缀:设置好了之后可以方便我们定位处理任务所在的线程池

executor.setThreadNamePrefix("do-something-");

// 缓冲队列满了之后的拒绝策略:由调用线程处理(一般是主线程)

executor.setRejectedExecutionHandler(new ThreadPoolExecutor.DiscardPolicy());

executor.initialize();

return executor;

}

}

使用的方式非常简单,在需要异步的方法上加@Async注解

@RestController

public class

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值