【问题标题】:How to write a CompletableFuture supplyAsync (called in for loop) in Spring Boot?如何在 Spring Boot 中编写 CompletableFuture supplyAsync(在 for 循环中调用)?
【发布时间】:2021-03-24 17:51:41
【问题描述】:

我有一个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。

【问题讨论】:

    标签: spring-boot for-loop asynchronous completable-future


    【解决方案1】:

    您可以使用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默认使用fork join pool,它对它旋转的线程有一些限制

    【讨论】:

      猜你喜欢
      • 2010-09-08
      • 2022-01-27
      • 1970-01-01
      • 2021-07-03
      • 2019-03-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-01
      相关资源
      最近更新 更多