介绍
在Java应用中,绝大多数情况下都是通过同步的方式来实现交互处理的;但是在处理与第三方系统交互的时候,容易造成响应迟缓的情况,之前大部分都是使用多线程来完成此类任务。其实,在Spring 3.x之后,就已经内置了@Async来完美解决这个问题,本文将完成介绍@Async的用法。
@Async的使用
注意事项
- 必须用在public方法上,且不能是static方法
- 不能与调用的方法在同一个类中
- 需要把该方法注入到Spring容器中,就是在一个类中添加异步方法,并在此类上使用@Component之类的注解加入到容器
注解配置开启
在springboot启动类上添加 @EnableAsync 注解
@EnableAsync
public class CupidApplication {
基于@Async无返回值调用
/**
* 没有返回值的Async方法
*/
@Override
@Async
public void asyncMethodWithVoidReturnType() {
log.info("没有返回值的Async方法, ThreadName : {}", Thread.currentThread().getName());
}
使用的方式非常简单,一个标注即可解决所有的问题。
调用结果:
2020-08-27 11:52:31.197 INFO 7311 --- [ task-5] c.w.cupid.service.impl.AsyncServiceImpl : 没有返回值的Async方法, ThreadName : task-5
基于@Async返回值的调用
/**
* 有返回值的Async方法
* @return Future new AsyncResult
*/
@Override
@Async
public Future<String> asyncMethodWithReturnType() {
log.info("有返回值的Async方法, ThreadName : {}", Thread.currentThread().getName())