我遇到了一个奇怪的情况。我与CompletableFuture
摆弄和运行下面的代码时,我会有意想不到的效果:嵌套期货未执行
public static void main(String[] args) {
CompletableFuture<CompletableFuture<CompletableFuture<CompletableFuture<CompletableFuture<CompletableFuture<Object>>>>>> completableFutureCompletableFuture = CompletableFuture.supplyAsync(() -> {
System.out.println("first");
return CompletableFuture.supplyAsync(() -> {
System.out.println("second");
return CompletableFuture.supplyAsync(() -> {
System.out.println("third");
return CompletableFuture.supplyAsync(() -> {
System.out.println("fourth");
return CompletableFuture.supplyAsync(() -> {
System.out.println("fifth");
return CompletableFuture.completedFuture(null);
});
});
});
});
});
completableFutureCompletableFuture.get();
}
没有异常被抛出(使用exceptionally
即使)和我看到的是,控制台输出
first
second
third // appears sometimes
现在,很明显,这段代码并没有真正的产值,但是这是代码的嵌套数量未知的情况,其中每个或其中一些创建了不会执行的嵌套。
任何解释(和示例如何修复),将不胜感激
你可能不希望有嵌套期货这样的。你应该看看['ThenCompose [Async]()'](https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html#thenCompose-java.util .function.Function-)。 –