【发布时间】:2017-07-18 06:53:57
【问题描述】:
我有 3 个 CompletableFuture,所有 3 个都返回不同的数据类型。
我希望创建一个结果对象,它是所有 3 个期货返回的结果的组合。
所以我当前的工作代码如下所示:
public ClassD getResultClassD() {
ClassD resultClass = new ClassD();
CompletableFuture<ClassA> classAFuture = CompletableFuture.supplyAsync(() -> service.getClassA() );
CompletableFuture<ClassB> classBFuture = CompletableFuture.supplyAsync(() -> service.getClassB() );
CompletableFuture<ClassC> classCFuture = CompletableFuture.supplyAsync(() -> service.getClassC() );
CompletableFuture.allOf(classAFuture, classBFuture, classCFuture)
.thenAcceptAsync(it -> {
ClassA classA = classAFuture.join();
if (classA != null) {
resultClass.setClassA(classA);
}
ClassB classB = classBFuture.join();
if (classB != null) {
resultClass.setClassB(classB);
}
ClassC classC = classCFuture.join();
if (classC != null) {
resultClass.setClassC(classC);
}
});
return resultClass;
}
我的问题是:
我的假设是,因为我使用的是
allOf和thenAcceptAsync,所以这个调用将是非阻塞的。我的理解对吗?这是处理返回不同结果类型的多个期货的正确方法吗?
在
thenAcceptAsync内构造ClassD对象对吗?- 在 thenAcceptAsync lambda 中使用
join或getNow方法是否合适?
【问题讨论】: