gpt4 book ai didi

java - ExecutorService.submit(Task) vs CompletableFuture.supplyAsync(Task, Executor)

转载 作者:IT老高 更新时间:2023-10-28 21:13:02 25 4
gpt4 key购买 nike

要并行或异步运行一些东西,我可以使用 ExecutorService:<T> Future<T> submit(Runnable task, T result);或 CompletableFuture API:static <U> CompletableFuture<U> supplyAsync(Supplier<U> supplier, Executor executor);(假设我在这两种情况下都使用同一个 Executor)

除了返回类型FutureCompletableFuture有什么显着差异。或者什么时候用什么?

如果我使用 CompletableFuture 有什么区别?默认 API Executor (没有执行者的方法)?

最佳答案

Besides the return type Future vs. CompletableFuture are there any remarkable differences. Or When to use what?

其实很简单。当您希望执行线程等待异步计算响应时,您可以使用 Future。这方面的一个例子是并行合并/排序。左异步排序,右同步同步,左等待完成(future.get()),合并结果。

当您希望执行某些操作时使用 CompleteableFuture,完成后的结果与执行的线程异步。例如:我想异步进行一些计算,当我计算时,将结果写入某个系统。请求线程可能不需要等待结果。

您可以在单个 Future 可执行文件中模仿上述示例,但 CompletableFuture 提供了更流畅的界面和更好的错误处理。

这真的取决于你想做什么。

And what are the differences if i use the CompletableFutureApi with default Executor (the method without executor)?

它将委托(delegate)给 ForkJoin.commonPool(),这是系统上 CPU 数量的默认大小。如果您正在做一些 IO 密集型的事情(读取和写入文件系统),您应该以不同的方式定义线程池。

如果它是 CPU 密集型的,使用 commonPool 最有意义。

关于java - ExecutorService.submit(Task) vs CompletableFuture.supplyAsync(Task, Executor),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39472061/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com