假设
CompletableFuture<T> cf = CompletableFuture.completedFuture(...);
cf.thenApplyAsync(f)
.thenApplyAsync(g);
cf.thenApplyAsync(h);
Run Code Online (Sandbox Code Playgroud)
通过调用f和g的调用,我们得到了保证的顺序.什么^ h?我们是否得到任何guarentees ^ h将八方通后执行摹?
我试着把g睡觉以便测试这个,我总是看到h在g之后执行,但这不是证据.如果是这样的情况,h总是在g之后执行,我在哪里可以找到关于此的文档?我阅读了CompletionStage,ExecutorService和CompletableFuture文档,但我还没有找到任何信息可以让我得到关于排序的结论,例如在(g.f)的情况下不涉及链接.
如果它不在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;
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
536 次 |
| 最近记录: |