来自 ExecutorService 的 CompletableFuture

CompletableFuture from ExecutorService

我创建了自定义 ExecutorService

ExecutorService executor =
        new ThreadPoolExecutor(0, maxPoolSize, keepAliveTime, timeUnit,
                               new LinkedBlockingDeque<>());

我向其提交任务

Future<String> result = executor.submit(() -> "test");

如你所见,执行者returns一个微薄的Future;我更希望有一个 CompletableFuture 可以与其他 CompletableFuture 链接起来。

Guava, we have the ListeningExecutorService that returns ListenableFutures。就我的意图和目的而言,那些 ListenableFutureCompletableFuture 一样好。

不过,我还是想尽可能多地使用 Java 的标准库,这意味着我正在寻找一种方法从我的自定义执行程序中获取 CompletableFutures。

事后看来很明显:不要试图从执行程序中获取 CompletableFuture,而是将执行程序传递给 CompletableFuture

像这样:

CompletableFuture<String> futureOutput =
        CompletableFuture.supplyAsync(() -> "test", executor);

任务将使用 executor 提供的线程之一执行,客户端可以使用 CompletableFuture 的所有便利来获取任务结果。