java - 延迟执行服务

标签 java concurrency future executorservice

是否有一个 ExecutorService 允许我在请求之前提交任务而不开始执行?我正在寻找类似 ScheduledExecutorService 的东西,只不过我想手动触发执行而不依赖于固定时间延迟。

我寻找这个的原因是因为我想创建一组任务,这些任务可以递归地使用从同一组中的并行任务生成的 Future 的结果。因此,我需要首先提交所有任务才能获得一组 Future,然后才能允许任务开始执行。

最佳答案

这听起来像是 CompletableFuture 的工作

  • 将任务的第一部分作为单独的CompletableFutures
  • 触发执行
  • 然后使用 CompletableFuture.allOf(...furures)创建一个只有当所有事情都完成后才完成的障碍 future
  • 然后使用诸如 CompletableFuture.thenAccept 之类的组合器之一来安排下一部分任务在屏障 future 完成时执行
<小时/>

但更惯用的使用方法是根据前一个任务的 future 结果来链接每个下一个任务

CompletableFuture<FirstResult> firstTask = //....
CompletableFuture<SecondResult> secondTask = firstTask.thenApply(someTransformation);
CompletableFuture<Void> anotherTaks = firstTask.thenAccept(someConsumer);
CompletableFuture<ThirdResult> combined =  firstTask.thenAcceptBoth(secondTask, someFunction);

关于java - 延迟执行服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24854811/

相关文章:

scala - Akka HTTP : Blocking in a future blocks the server

multithreading - 链式2 future -计算一个并返回另一个

java - PHP json_encode() 不返回任何内容

java - 使用ScheduledThreadPoolExecutor时如何处理阻塞任务

java - ExecutorService 是否有一个解决方案,可以限制每个提交的 Callable 的时间

python - 为什么 asyncio.Future 与 concurrent.futures.Future 不兼容?

java - 如何正确模拟一个简单的 CRUD 界面?

java - Base64编码-解码(Java中)支持数学符号吗?

java - JavaFX 中具有输入和输出参数的并发后台任务或服务

使用即发即忘 Futures 进行 Scala 测试