我遇到了一個奇怪的情況。我與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-)。 –