来自 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 ListenableFuture
s。就我的意图和目的而言,那些 ListenableFuture
与 CompletableFuture
一样好。
不过,我还是想尽可能多地使用 Java 的标准库,这意味着我正在寻找一种方法从我的自定义执行程序中获取 CompletableFuture
s。
事后看来很明显:不要试图从执行程序中获取 CompletableFuture
,而是将执行程序传递给 CompletableFuture
。
像这样:
CompletableFuture<String> futureOutput =
CompletableFuture.supplyAsync(() -> "test", executor);
任务将使用 executor
提供的线程之一执行,客户端可以使用 CompletableFuture
的所有便利来获取任务结果。
我创建了自定义 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 ListenableFuture
s。就我的意图和目的而言,那些 ListenableFuture
与 CompletableFuture
一样好。
不过,我还是想尽可能多地使用 Java 的标准库,这意味着我正在寻找一种方法从我的自定义执行程序中获取 CompletableFuture
s。
事后看来很明显:不要试图从执行程序中获取 CompletableFuture
,而是将执行程序传递给 CompletableFuture
。
像这样:
CompletableFuture<String> futureOutput =
CompletableFuture.supplyAsync(() -> "test", executor);
任务将使用 executor
提供的线程之一执行,客户端可以使用 CompletableFuture
的所有便利来获取任务结果。