有时,我们需要在一个方法中完成方法内的逻辑后需要通知其他接口,但是不需要等其他接口返回结果就直接在当前方法中返回(比如用户支付完订单后需要及时给用户返回支付结果,同时需要通知商户:用户已完成支付),这时就需要异步调用(不用等待通知完商户才给用户返回支付结果)。
1.在启动类上添加@EnableAsync注解,表示项目支持异步方法调用;
2.在需要异步调用的方法上添加@Async注解,表示该方法为异步方法,即该方法和调用者不在一个线程中进行。
示例代码:
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.scheduling.annotation.Async;
import org.springframework.scheduling.annotation.EnableAsync;
@SpringBootApplication
@EnableAsync
public class AsyncDemoApplication {
/**
* 异步方法
*
* @throws InterruptedException
*/
@Async
public void asyncMethod() throws InterruptedException {
for (int i = 1; i < 5; i++) {
System.out.println(Thread.currentThread().getName() + "********" + i);
}
}
public static void main(String[] args) {
try {
//获取上下文
ConfigurableApplicationContext context = SpringApplication.run(AsyncDemoApplication.class, args);
//获取对象bean,进而调用异步方法
context.getBean(AsyncDemoApplication.class).asyncMethod();
for (int i = 0; i < 5; i++) {
System.out.println(Thread.currentThread().getName() + "********" + i);
if (2 == i)
Thread.sleep(1000l);
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}