我正在处理一些处理多个 REST 调用的 Java 代码call1()call2()call3()...我想并行化这些调用,但同步执行我的主要代码。我用lamba和并行流制作了一个POC:List<Runnable> list = new ArrayList();list.add(() -> {call1()});list.add(() -> {call2()});list.add(() -> {call3()});list.add(...);list.parallelStream() .forEach(Runnable::run);你有其他解决方案吗?我还检查了使用来自 Jersey 客户端的异步调用,但这需要更多的代码更改。
1 回答
鸿蒙传说
TA贡献1865条经验 获得超7个赞
您正在寻找的只是异步运行您的调用。您可以使用CompletableFutures 提交任务,然后等待它们完成:
list.stream() //you don't really need a parallel stream
.map(CompletableFuture::runAsync)
.collect(Collectors.toList()) //make sure all tasks are submitted
.stream()
.forEach(CompletableFuture::join);
这将提交所有任务(异步运行),然后等待每个任务完成运行。发生这种情况时,该方法将返回。
您可能需要控制异步任务的线程池。这是一个使用 10 线程池的示例:
ExecutorService es = Executors.newFixedThreadPool(10);
list.stream()
.map(r -> CompletableFuture.runAsync(r, es))
...
添加回答
举报
0/150
提交
取消