当前位置: 首页 > 面试题库 >

ExecutorService.submit(Task)与CompletableFuture.supplyAsync(Task,Executor)

长孙嘉容
2023-03-14
问题内容

要并行或异步运行某些内容,我可以使用ExecutorService:<T> Future<T> submit(Runnable task, T result);或CompletableFuture Api :(static <U> CompletableFuture<U> supplyAsync(Supplier<U> supplier, Executor executor);
假设在两种情况下我都使用相同的Executor)

除了返回类型Futurevs. 之外,CompletableFuture还存在其他显着差异。或什么时候使用什么?

如果我将CompletableFutureAPI与默认值一起使用Executor(没有执行程序的方法)有什么区别?


问题答案:

除了返回类型Future与CompletableFuture之外,还存在其他显着差异。或什么时候使用什么?

真的很简单。您可以使用Future,当你想执行的线程等待异步计算响应。并行合并/排序就是一个例子。异步左排序,同步右排序,等待左完成(future.get()),合并结果。

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

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

这实际上取决于您要做什么。

如果我将CompletableFutureApi与默认的执行程序(没有执行程序的方法)一起使用,会有什么区别?

它将ForkJoin.commonPool()默认的大小委托给您系统上的CPU数量。如果您要执行大量的IO操作(读取和写入文件系统),则应该以不同的方式定义线程池。

如果占用大量CPU,则使用commonPool最有意义。



 类似资料:
  • 提醒: 这个API不再是推荐的模式了 - export your tasks。因此就不翻译了! 在任务系统中定义任务。然后可以从命令行和 series()、parallel() 和 lastRun() api 访问该任务。 Usage Register a named function as a task: const { task } = require('gulp'); function b

  • task是监控系统一个必要的辅助模块。定时任务,实现了如下几个功能: index更新。包括图表索引的全量更新 和 垃圾索引清理。 falcon服务组件的自身状态数据采集。定时任务了采集了transfer、graph、task这三个服务的内部状态数据。 falcon自检控任务。 源码编译 # update common lib cd $GOPATH/src/github.com/open-falco

  • - [ ] Eat - [x] Code - [x] HTML - [x] CSS - [x] JavaScript - [ ] Sleep [ ] Eat [x] Code [x] HTML [x] CSS [x] JavaScript [ ] Sleep

  • task是监控系统一个必要的辅助模块。定时任务,实现了如下几个功能: index更新。包括图表索引的全量更新 和 垃圾索引清理。 falcon服务组件的自身状态数据采集。定时任务了采集了transfer、graph、task这三个服务的内部状态数据。 falcon自检控任务。 源码编译 # update common lib cd $GOPATH/src/github.com/open-falco

  • Task Scheduler You can use the task scheduler to automatically start and stop certain tasks at defined times and intervals. You can use the task scheduler to start and stop certain automated tasks out

  • Task Details Window Clicking on the popout icon for an individual task on the Burp Dashboard opens the task details window. This displays full details of the selected task. Depending on the type of th