spring-boot - 如何在 Spring Boot 中编写 CompletableFuture supplyAsync(在 for 循环中调用)?
问题描述
我有一个 for 循环来根据 for 循环的增量发起请求。
List<String> listModel = new ArrayList<>();
for(int i=0;i<5;i++)
{
String resp = initiateRequest(i);
listModel.add(resp);
}
public String initiateRequest(int i)
{
String url = String.format("http://api.github.com/"+i);
String response = restTemplate.getForObject(url);
return response;
}
想要将其转换为 CompletableFuture Async。
解决方案
您可以使用IntStream进行迭代,然后使用CompletableFuture.supplyAsync进行异步请求
并使用CompletableFuture.allOf等到所有未来对象都完成
CompletableFuture<String>[] futures = IntStream.range(0,5).mapToObj(i->CompletableFuture.supplyAsync(()->this.initiateRequest(i)))
.toArray(CompletableFuture[]::<String>new);
CompletableFuture.allOf(futures).join();
附带说明CompletableFuture.supplyAsync
,默认情况下使用分叉连接池,并且它对其旋转的线程有一些限制
推荐阅读
- c++ - 如何解决分段错误错误 C++
- python - Python Keras 多个输入层 - 如何连接/合并?
- php - PHP - 每 30 分钟发送一次通知而不使用 cron
- quickfix - 如果 43=Y,如何告诉 FIX 接受者不要发送消息
- elixir - 如何让 elixir 编译器在运行 phoenix 服务器时显示警告?
- reactjs - 使用 Firebase Cloud 在 React 中删除数据
- java - 如何在良好的视图中从嵌套哈希映射中检索数据?
- wpf - 通过 SetValue 传递控件类型
- scala - Scala REPL 问题 - 多表达式问题
- windows - ADFS SSL 证书:辅助证书的用途是什么?