为了账号安全,请及时绑定邮箱和手机立即绑定

并行化 REST 调用的最佳方法是什么?

并行化 REST 调用的最佳方法是什么?

明月笑刀无情 2021-09-29 15:26:33
我正在处理一些处理多个 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))

     ...


查看完整回答
反对 回复 2021-09-29
  • 1 回答
  • 0 关注
  • 154 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信