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);
}
CompletableFuture
最新推荐文章于 2024-07-24 21:47:59 发布