来自ExecutorService的CompletableFuture

时间:2017-12-11 10:23:15

标签: java executorservice completable-future

我创建了一个自定义ExecutorService

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

我提交我的任务

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

如您所见,执行者返回一个微不足道的Future;我宁愿拥有CompletableFuture,我可以与其他CompletableFuture链接。

Guava中,我们有ListeningExecutorService返回ListenableFutures。对于我的意图和目的,那些ListenableFutureCompletableFuture一样好。

尽管如此,我还是希望尽可能多地使用Java的标准库,这意味着我正在寻找一种从我的自定义执行器中获取CompletableFuture的方法。

1 个答案:

答案 0 :(得分:5)

事后看来很明显:不要试图从执行者那里获得CompletableFuture,而是将执行者传递给CompletableFuture

像这样:

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

该任务将使用executor提供的其中一个线程执行,客户端具有CompletableFuture的所有便利,可以获得任务的结果。