そのdoens'tリターンボイドCompletableFuture.allOf(CompletableFuture.allOfがvoidソリューションを返しません)

輸入はjava.util.List; 
輸入java.util.concurrent.CompletableFuture。
輸入java.util.concurrent.TimeUnit。
輸入java.util.stream.Collectors。
輸入java.util.stream.Stream。

パブリック クラスメイン{ 

    静的 CompletableFuture <リスト<>> ALLOF(CompletableFuture <>??... CFS){
         返すCompletableFuture.allOf(CFS)
                .thenApply(無視 - > Stream.of(CFS)
                        .MAP(CF - > CF .join())
                        .collect(Collectors.toList()))。
    } 

    パブリック 静的 ボイドメイン(文字列[]引数){ 

        //我々はCompletableFuturesの3(または任意の数)を有する 
        CompletableFuture <string>をCF1 = CompletableFuture.supplyAsync(() - > {睡眠(1); リターン " ハロー" ;}); 
        CompletableFuture <整数> CF 2 = CompletableFuture.supplyAsync(() - > {睡眠(1); 返す 10 ;}); 
        CompletableFuture <ダブル> CF 3 = CompletableFuture.supplyAsync(() - > {睡眠は(1); 戻り20D;}); 

        CompletableFuture <リスト<>> ALLOF = ALLOF(CF1、CF2、CF3);?// 私たちはすぐ上に作成メソッドを呼び出す

        //を我々はそこ-alreadyを得ることができます-結果のいずれか、次に使用して
         // 使用して結果取得: 
        allOf.thenAccept(。L - > l.forEach(システムアウト::のprintlnを)); 

        // またはCompletableFuture.joinを使用して()(またはCompletableFuture.get())
         // OR(非タイプセーフ) 
        文字列S =(文字列)allOf.join()。取得0 ); 
        整数I =(整数)allOf.join()。取得1 ); 
        ダブルD =(ダブル)allOf.join()。取得2 ); 
        システム。アウト .println(S + " "+ I + " " + D)。
        睡眠(2)。// デフォルトCompletableFutureエグゼキュータがデーモンスレッドベースのエグゼキュータですので    } プライベート静的ボイド睡眠(int型秒){
         しようと{ 
            TimeUnit.SECONDS.sleep(秒)。
        } キャッチ(InterruptedExceptionある電子){ 
            e.printStackTrace(); 
        } 
    } 
}



      

抜粋住所:http://m-hewedy.blogspot.com/2017/02/completablefutureallof-that-doenst.html

おすすめ

転載: www.cnblogs.com/passedbylove/p/11184830.html