猿问

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

我正在处理一些处理多个 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 客户端的异步调用,但这需要更多的代码更改。


明月笑刀无情
浏览 155回答 1
1回答

鸿蒙传说

您正在寻找的只是异步运行您的调用。您可以使用CompletableFutures 提交任务,然后等待它们完成:list.stream() //you don't really need a parallel stream&nbsp; &nbsp; .map(CompletableFuture::runAsync)&nbsp; &nbsp; .collect(Collectors.toList()) //make sure all tasks are submitted&nbsp; &nbsp; .stream()&nbsp; &nbsp; .forEach(CompletableFuture::join);这将提交所有任务(异步运行),然后等待每个任务完成运行。发生这种情况时,该方法将返回。您可能需要控制异步任务的线程池。这是一个使用 10 线程池的示例:ExecutorService es = Executors.newFixedThreadPool(10);list.stream()&nbsp; &nbsp; .map(r -> CompletableFuture.runAsync(r, es))&nbsp; &nbsp; &nbsp;...
随时随地看视频慕课网APP

相关分类

Java
我要回答