2017-01-10 3 views
0

クラスCompletableFutureは、complete(...)の呼び出し後に未来が完了したときに呼び出されるアクションを追加することを許可します。whenComplete(...)を使用してCompletableFutureに複数のアクションを追加することはできますか?

私はwhenComplete(...)を使用することはできますが、将来を完了したときに実行するための複数のBiConsumerアクションを追加し、complete(...)メソッドが呼び出されたときにそれらのすべてが実行されていますか?

答えて

2

はい、すべてのBiConsumerアクションが追加され、complete(...)を呼び出すと逆の順序で実行されます。

これは次のようになります実証する例:

My tests ... 
do something else; false 
three step(s) 
two step(s) 
one step(s) 
Done true 

public class Application { 
    public static void main(String[] args) { 
     System.out.println("My tests ..."); 
     CompletableFuture<String> futureString = new CompletableFuture<String>(); 
     futureString.whenComplete((s,e)->System.out.println("one " + s)); 
     futureString.whenComplete((s,e)->System.out.println("two " + s)); 
     futureString.whenComplete((s,e)->System.out.println("three " + s)); 
     System.out.println("do something else; "+ futureString.isDone()); 
     futureString.complete("step(s)"); 
     System.out.println("Done " + futureString.isDone()); 
    } 
} 

このプログラムを実行し、印刷された結果は、この見えます

関連する問題