Java 当完成(…)时,是否可以向可完成的未来添加多个操作?

Java 当完成(…)时,是否可以向可完成的未来添加多个操作?,java,completable-future,Java,Completable Future,类CompletableFuture允许添加在调用complete(…)后future完成时调用的操作 当完成(…)时,我是否可以使用来添加多个双消费者操作,以便在完成未来时执行,并且在调用complete(…)方法时是否都会执行?是的,在调用complete(…)时,所有双消费者操作都会被添加,并以相反的添加顺序执行 演示这一点的示例可能如下所示: public class Application { public static void main(String[] args) {

CompletableFuture
允许添加在调用
complete(…)
后future完成时调用的操作


当完成(…)时,我是否可以使用
来添加多个双消费者操作,以便在完成未来时执行,并且在调用
complete(…)
方法时是否都会执行?

是的,在调用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());
    }
}

是的,在调用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());
    }
}

相反的顺序是一种已定义的行为,还是只是JVM的巧合或实现细节?如果您有任何权威的广告资源,我们将不胜感激。@derM这是一个好问题。从我的理解来看,我希望触发这些动作的顺序总是相反的。但不幸的是,我没有任何创作资源,因此我不能100%排除根据实现的不同可能会有差异。相反的顺序是一种定义的行为,还是可能只是JVM的巧合或实现细节?如果您有任何权威的广告资源,我们将不胜感激。@derM这是一个好问题。从我的理解来看,我希望触发这些动作的顺序总是相反的。但不幸的是,我没有任何授权资源,因此我不能100%排除根据实现可能存在差异的可能性。