CompletableFuture

    private static final int corePoolSize = 10;
    private static final int maximumPoolSize = 10;
    private static final long keepAliveTime = 60L;

    private static final ExecutorService EXECUTOR = new ThreadPoolExecutor(corePoolSize, maximumPoolSize, keepAliveTime, TimeUnit.MILLISECONDS,
            new SynchronousQueue<>());



     <T> List<T> multiThreadQuery(Class<T> beanClass,Map<String,Object> paramMap, String elementName,Set<String> tableType){
        HashMap<String,Object> params = new HashMap();
        params.put("elementName",elementName);
         params.putAll(paramMap);
        if(null==paramMap || paramMap.isEmpty()){
            return null;
        }
        List<T> list = new ArrayList<>();
         if(null != paramMap.get("curveVOs")){
             List<CurveVO> curveVOs =(List<CurveVO>)  paramMap.get("curveVOs");
//             for(int i=0;i<curveVOs.size();i++){
//                 getSqlResults(beanClass, tableType, params, list, curveVOs, i);
//             }

             //分片调用SQL查询
             List<CompletableFuture<Void>> calcuTaskList = curveVOs
                     .stream()
                     .map(curveVO -> CompletableFuture.runAsync(() -> getSqlResults(beanClass, tableType, params, list, curveVO), EXECUTOR))
                     .collect(Collectors.toList());
             // 线程并发执行
             CompletableFuture.allOf(calcuTaskList.toArray(new CompletableFuture[0])).join();
         }
        return list;
    }



    private <T> void getSqlResults(Class<T> beanClass, Set<String> tableType, HashMap<String, Object> params, List<T> list, CurveVO curveVO) {
        params.put("curveId", curveVO.getCurveId());
        if(!curveVO.getCurveType().isEmpty()&&!tableType.isEmpty()){
            if(tableType.contains("modt")){
                if(curveVO.getCurveType()
                        .equals(com.yss.datamiddle.enums.CurveCalcAnalEnum.CurveType.STD_CURVE.getCode())){
                    params.put("modt",T_CURVE_MODT_INFO);
                }else if(curveVO.getCurveType()
                        .equals(com.yss.datamiddle.enums.CurveCalcAnalEnum.CurveType.CUSTOM_CURVE.getCode())){
                    params.put("modt",T_CUS_CURVE_MODT_INFO);
                }
            }
            if(tableType.contains("sample")){
                if(curveVO.getCurveType()
                        .equals(com.yss.datamiddle.enums.CurveCalcAnalEnum.CurveType.STD_CURVE.getCode())){
                    params.put("sample",T_CURVE_FIT_SAMPLE);
                }else if(curveVO.getCurveType()
                        .equals(com.yss.datamiddle.enums.CurveCalcAnalEnum.CurveType.CUSTOM_CURVE.getCode())){
                    params.put("sample",T_CUS_CURVE_FIT_SAMPLE);
                }
            }
            if(tableType.contains("margin")){
                if(curveVO.getCurveType()
                        .equals(com.yss.datamiddle.enums.CurveCalcAnalEnum.CurveType.STD_CURVE.getCode())){
                    params.put("margin",T_CURVE_FIT_INTER_MARGIN_DEV);
                }else if(curveVO.getCurveType()
                        .equals(com.yss.datamiddle.enums.CurveCalcAnalEnum.CurveType.CUSTOM_CURVE.getCode())){
                    params.put("margin",T_CUS_CURVE_FIT_INTER_MARGIN_DEV);
                }
            }

        }
        if(null!=curveVO.getQueryDate()&&
                !curveVO.getQueryDate().isEmpty()){
            params.put("queryDate", curveVO.getQueryDate());
        }
        if(null!= curveVO.getRemainPeriod()&&
                !curveVO.getRemainPeriod().isEmpty()){
            params.put("remainPeriod", curveVO.getRemainPeriod());
        }
        List<T> listVo = getSqlListVO(beanClass, params);
        list.addAll(listVo);
    }

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值