2017-01-10 4 views
0

Класс CompletableFuture позволяет добавить действие, которое вызывается, когда будущее завершается после вызова complete(...).Можно ли добавить несколько действий в CompletableFuture с помощью ifComplete (...)?

Могу ли я использовать whenComplete(...) для добавить несколько действий BiConsumer для выполнения при заполнении будущего и все они выполняются, когда метод complete(...) называется?

ответ

2

Да, все действия BiConsumer добавляются, и они выполняются в порядке повторного добавления при вызове complete (...).

пример, чтобы продемонстрировать это может выглядеть следующим образом:

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()); 
    } 
} 

При запуске этой программы, напечатанный результат выглядит следующим образом:

My tests ... 
do something else; false 
three step(s) 
two step(s) 
one step(s) 
Done true 
Смежные вопросы