Why use CompletableFuture?
solve. Waiting for the future at the place of future.get() is a synchronous operation. If you use the isDone() method for loop judgment, it is too time-consuming and laborious
public class Test {
public static void main(String[] args) throws InterruptedException {
MoneyServiceImpl MoneyServiceImpl=new MoneyServiceImpl();
MoneyServiceImpl.addMoney(100).whenComplete((result,exc)->{
if (exc == null) {
System.out.println("结果为"+result);
} else {
System.out.println("发生异常"+exc);
}
});
System.out.println("主线程执行结束");
//这里是为了暂缓让主线程退出,让结果可以打印出来
Thread.sleep(30000);
}
}
The main thread calls the asynchronous method, and the whenComplete method of CompletableFuture is used to accept return or exception
Method implementation:
public class MoneyServiceImpl implements MoneyService {
@Override
public CompletableFuture<String> addMoney(int money) throws InterruptedException {
return CompletableFuture.supplyAsync(()->{
try {
System.out.println("成功增加"+money);
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
return "第一步完成";
}).thenApplyAsync(new Function<String, String>() {
@Override
public String apply(String lastResult) {
//这里的入参是上一步的结果
System.out.println(lastResult);
return "扣减了"+money;
}
});
}
@Override
public CompletableFuture<String> subMoney(int money) throws InterruptedException {
return CompletableFuture.supplyAsync(()->{
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
return "成功扣减"+money;
});
}
}
in
The thenApplyAsync method passes the results of the previous thread to the next thread and continues asynchronous execution