java – 来自ExecutorService的CompletableFuture

我创建了一个自定义ExecutorService

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

我提交我的任务

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

如你所见,执行者返回一个微薄的未来;我宁愿拥有一个CompletableFuture,我可以与其他CompletableFutures链接.

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

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

解决方法:

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

像这样:

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

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

上一篇:java – 当ThreadPoolExecutor的所有任务完成执行作业时插入数据库


下一篇:java – 如何将CompletableFuture.supplyAsync与PriorityBlockingQueue一起使用?