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

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

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

以下是代码示例:

 public LhzyStatRsp queryLhzyStat(LhzyStatReq stReq) {

        LhzyStatRsp rsp = new LhzyStatRsp();

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

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

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

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

        return rsp;

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JonTang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值