Java使用并行流来处理多个请求

前言:最近在工作中遇到这种情况,在一个接口中,需要调用多个方法,但是每个方法都是独立的,如果使用串行的方式来调用多个方法,会导致该接口的响应速度变慢,所以需要采用并行的方式来处理多个方法。

为了使用并行流来并行处理请求,可以将每个请求封装为一个Supplier,然后使用Streammap方法将这些Supplier映射为结果集合,最后调用collect方法收集结果。

以下是代码示例:

 public LhzyStatRsp queryLhzyStat(LhzyStatReq stReq) {

        LhzyStatRsp rsp = new LhzyStatRsp();

        //创建请求的Supplier
        Supplier queryLhzyOrgStatSupplier = () -> lhzyStatMapper.queryLhzyOrgStat();
        Supplier queryLhzyCaptialStatSupplier = () -> lhzyStatMapper.queryLhzyCaptialStat();
        Supplier> queryLhzyCaptailTop3Supplier = () -> lhzyStatMapper.queryLhzyCaptailTop3(limit);
        Supplier> queryLhzyOrgTop3Supplier = () -> lhzyStatMapper.queryLhzyOrgTop3(limit);
        Supplier> queryLhzyThemeTop3Supplier = () -> lhzyStatMapper.queryLhzyThemeTop3(limit);

        //并行处理请求
        List> futures = Arrays.asList(
                CompletableFuture.supplyAsync(queryLhzyOrgStatSupplier),
                CompletableFuture.supplyAsync(queryLhzyCaptialStatSupplier),
                CompletableFuture.supplyAsync(queryLhzyCaptailTop3Supplier),
                CompletableFuture.supplyAsync(queryLhzyOrgTop3Supplier),
                CompletableFuture.supplyAsync(queryLhzyThemeTop3Supplier)
        );

        //收集结果
        List results = futures.stream()
                .map(CompletableFuture::join)
                .collect(Collectors.toList());

        Map queryLhzyOrgStat = (Map) results.get(0);
        Map queryLhzyCaptialStat = (Map) results.get(1);
        List queryLhzyCaptailTop3 = (List) results.get(2);
        List queryLhzyOrgTop3 = (List) results.get(3);
        List queryLhzyThemeTop3 = (List) results.get(4);
        
        /*
        * ..... 其他逻辑   
        */

        return rsp; 
  

希望可以为遇到相同问题的朋友们,提供一下解决思路,欢迎在评论区一起交流。

你可能感兴趣的:(Java,java)