我创建了一个自定义ExecutorService
ExecutorService executor =
new ThreadPoolExecutor(0, maxPoolSize, keepAliveTime, timeUnit, new LinkedBlockingDeque<>());
我提交我的任务
Future<String> result = executor.submit(() -> "test");
如您所见,执行者返回一个微不足道的Future
;我宁愿拥有CompletableFuture
,我可以与其他CompletableFuture
链接。
在Guava中,我们有ListeningExecutorService
返回ListenableFuture
s。对于我的意图和目的,那些ListenableFuture
与CompletableFuture
一样好。
尽管如此,我还是希望尽可能多地使用Java的标准库,这意味着我正在寻找一种从我的自定义执行器中获取CompletableFuture
的方法。
答案 0 :(得分:5)
事后看来很明显:不要试图从执行者那里获得CompletableFuture
,而是将执行者传递给CompletableFuture
。
像这样:
CompletableFuture<String> futureOutput =
CompletableFuture.supplyAsync(() -> "test", executor);
该任务将使用executor
提供的其中一个线程执行,客户端具有CompletableFuture
的所有便利,可以获得任务的结果。