Spring一个注解实现方法的异步调用,再也不用单开线程了

Spring一个注解实现方法的异步调用,再也不用单开线程了

介绍

同步调用

先来演示一下什么是同步调用

Spring一个注解实现方法的异步调用,再也不用单开线程了

测试方法

Spring一个注解实现方法的异步调用,再也不用单开线程了

输出如下

doTaskOne start 1566121320372
doTaskOne end 1566121321373
doTaskTwo start 1566121321373
doTaskTwo end 1566121322374

可以看到方法一执行完毕,方法二才会执行

异步调用不返回值

1.Spring Boot启动类上加@EnableAsync注解

@SpringBootApplication
@EnableAsync

2.方法上加@Async注解

Spring一个注解实现方法的异步调用,再也不用单开线程了

测试类如下

Spring一个注解实现方法的异步调用,再也不用单开线程了

最后的TimeUnit.SECONDS.sleep(3)保证主线程存活,不然主线程执行完看不到子线程输出的end,输出如下

doTaskOne start 1566121729140
doTaskTwo start 1566121729140
doTaskOne end 1566121730140
doTaskTwo end 1566121730140

看输出,2个任务同时启动。2个没有关系的任务以前需要2s才能执行完,异步后1s就能执行完,效率提高。

异步调用返回值

Spring一个注解实现方法的异步调用,再也不用单开线程了

测试类

Spring一个注解实现方法的异步调用,再也不用单开线程了

输出如下

doTaskTwo start 1566122170684
doTaskOne start 1566122170684
doTaskTwo end 1566122171684
doTaskOne end 1566122171684
taskOne return
taskTwo return

Future类的get方法是阻塞方法,没有结果返回时会一直阻塞。


分享到:


相關文章: