假设
CompletableFuture<T> cf = CompletableFuture.completedFuture(...);
cf.thenApplyAsync(f)
.thenApplyAsync(g);
cf.thenApplyAsync(h);
通过将呼叫引导至 f 和 g ,我们可以获得有保证的订购。 那么 h 呢?在 g 之后,我们是否会得到 h 一直执行的任何保证人?
我尝试将 g 置于睡眠状态以便对此进行测试,并且我总是看到 h 在 g 之后执行,但这不是证据。 如果 h 总是在 g 之后执行,我在哪里可以找到有关此内容的文档?我阅读了CompletionStage,ExecutorService和CompletableFuture文档,但我还没有真正找到任何信息可以让我得到关于订购的结论,而在(g。f)的情况下不涉及链接。
答案 0 :(得分:6)
如果它不在javadocs中,则无法保证。在您的情况下,h
可以在g
之前轻松执行。所有这一切都需要f
花费一段时间才能实现:
cf.thenApplyAsync(i -> {
try {
System.out.println("F");
Thread.sleep(5000);
return i;
} catch(InterruptedException e) {
throw new RuntimeException(e);
}
}).thenApplyAsync(i -> {
System.out.println("G");
return i;
});
cf.thenApplyAsync(i -> {
System.out.println("H");
return i;
});