异步并行(CompletableFuture)

本文详细介绍了如何在项目中使用 CompletableFuture 进行异步并发操作,包括创建、并行处理和结果获取。重点展示了在`getBaseInfo`方法中如何通过CompletableFuture获取多个属性数据并等待其完成。
摘要由CSDN通过智能技术生成

格式

var aFuture = CompletableFuture.supplyAsync(()->{
       //.....
       return xxx;
    });
    var bFuture = CompletableFuture.supplyAsync(()->{
       //.....
       return xxx;
    });
    var cFuture = CompletableFuture.supplyAsync(()->{
       //.....
       return xxx;
    });
    //并行处理
    CompletableFuture
      .allOf(aFuture,
    		bFuture,
    		cFuture)
    .join();
    //取值
    var a= aFuture.get();
    var b= bFuture.get();
    var c= cFuture.get();

在项目中的具体使用发法

 //TODO 异步并行
    @Override
    public IndexBaseInfoVO getBaseInfo(String beginCreateTime, String endCreateTime) {
        //1)构建一个空的结果集对象
        IndexBaseInfoVO result = new IndexBaseInfoVO();
        //2 封装结果集属性
        // 2.1 由于查询需要用到用户名 调用工具类获取用户名
        String username = SecurityUtils.getUsername();
        try {
            CompletableFuture<Integer> clueNums = CompletableFuture.supplyAsync(()->{
                // 2.2 开始查询第一个属性 线索数量
                return reportMpper.getCluesNum(beginCreateTime, endCreateTime, username);
            });
            CompletableFuture<Integer> bussinessNum = CompletableFuture.supplyAsync(()->{
                // 2.3 开始查询第一个属性 商机数量
                return reportMpper.getBusinessNum(beginCreateTime, endCreateTime, username);
            });

            CompletableFuture<Integer> contractNum = CompletableFuture.supplyAsync(()->{
                // 2.4 开始查询第一个属性 合同数量
                return reportMpper.getContractNum(beginCreateTime, endCreateTime, username);
            });
            CompletableFuture<Double> saleAmount = CompletableFuture.supplyAsync(()->{
                // 2.5 开始查询第一个属性 销售金额数量
                return reportMpper.getSalesAmount(beginCreateTime, endCreateTime, username);
            });
            //3 join等待所有线程全部执行完成
            CompletableFuture
                    .allOf(clueNums,
                            bussinessNum,
                            contractNum,
                            saleAmount)
                    .join();
            //4 封装结果集对象
            result.setCluesNum(clueNums.get());
            result.setBusinessNum(bussinessNum.get());
            result.setContractNum(contractNum.get());
            result.setSalesAmount(saleAmount.get());
        }catch (Exception e) {
            e.printStackTrace();
            return null;
        }
        //4 返回结果集对象
        return result;
    }

格式的参数介绍

 CompletableFuture<参数类型> 名字 = CompletableFuture.supplyAsync(()->{             
                return 你的参数
            });
 CompletableFuture<参数类型> 名字 = CompletableFuture.supplyAsync(()->{             
                return 你的参数
            });
 CompletableFuture<参数类型> 名字 = CompletableFuture.supplyAsync(()->{             
                return 你的参数
            });
前面三个里面的 是一起运行的  不会从上到下运行
CompletableFuture
                    .allOf(前面的名字,
                    		名字
                           )
                    .join();
 join是等待所有线程全部执行完成
 
 然后通过 名字.get 可以获得前面的返回的数据
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值