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