简介
最近对项目代码进行优化,遇到一个场景:一个方法对多个RPC同时发起调用,每个RPC的响应事件在200ms左右而且不受控制。
有同学使用异步进行了实现,参考网上查的一些资料,大部分是如下这种描述 资料地址
回调的核心代码如下
// 三个任务都调用完成,退出循环等待
while (!task1.isDone() || !task2.isDone() || !task3.isDone()) {
sleep(1000);
}
这种实现不够优雅,使用sleep在响应时间上存在问题。
优雅高效的实现
使用 springboot的 @Async 和 java8的 CompletableFuture
1、创建实体类,调用github的一个测试API,序列化使用jackson
package com.example.asyncmethod;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
@JsonIgnoreProperties(ignoreUnknown=true)
public class User {
private String name;
private String blog;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getBlog() {
return blog;
}
public void setBlog(String blog) {
this.blog = blog;
}
@Override
public String toString() {
return "User [name=" + name + ", blog=" + blog + "]";
}
}
2、创建github 查询的servbice
findUser方法使用了@Async注解,表示该方法会异步执行
返回值用