一次简单代码优化过程

113 阅读1分钟

本地代码优化总共分为以下四步骤:

  1. 遍历查询数据库
  2. 使用CompletableFuture将串行改为并行
  3. 简化代码,并引出线程安全问题
  4. CompletableFuture + countDownLatch + Vector

eae9a9a62c29a5a758340f2ee85e1ae.png

完整版代码如下

public List<ContractMan> selectContractMan() throws InterruptedException{
    CountDownLatch countDownLatch = new CountDownLatch(5);
    List<String> contractNumers= zhbExcelMapper.selectContractNumer();
    Vector<ContractMan> man=new Vector<>();

    List<List<String>> lists = averageAssign(contractNumers, 5);

    for(int i=0;i<lists.size();i++){
        int finalI = i;
        CompletableFuture future1 = CompletableFuture.supplyAsync(() -> {
            List<String> stringList = lists.get(finalI);
            for(String s:stringList){
                ContractMan contractMan =new ContractMan();
                contractMan.setContractNumber(s);
                String name= zhbExcelMapper.selectMan(s);
                contractMan.setName(name);
                man.add(contractMan);
            }
            return Boolean.TRUE;
        }).whenComplete((v,e)->{
            countDownLatch.countDown();
        });
    }

    countDownLatch.await();
    return man;
}