ACompletableFuture
与任何线程都没有关系。它只是一个使用方法异步检索到的结果的持有者,该方法对该结果进行操作。
static
supplyAsync
andrunAsync
方法只是辅助方法。supplyAsync
各州的 javadoc
返回一个CompletableFuture
由在 中运行的任务异步完成的 new ,ForkJoinPool.commonPool()
其值是通过调用给定的 获得的Supplier
。
这或多或少相当于
Supplier<R> sup = ...;
CompletableFuture<R> future = new CompletableFuture<R>();
ForkJoinPool.commonPool().submit(() -> {
try {
R result = sup.get();
future.complete(result);
} catch (Throwable e) {
future.completeExceptionally(e);
}
});
return future;
将CompletableFuture
返回,甚至允许您在任务提交到池之前完成它。
更一般的,如何CompletableFuture
同步线程?
它没有,因为它不知道哪些线程正在对其进行操作。这在javadoc中有进一步的暗示
由于(不同于FutureTask
)此类无法直接控制导致其完成的计算,因此取消被视为另一种形式的异常完成。方法 cancel 与 具有相同的效果completeExceptionally(new CancellationException())
。方法isCompletedExceptionally()
可用于确定是否
CompletableFuture
以任何异常方式完成。
CompletableFuture
对象不控制处理。