> 文章列表 > 多线程归并查询提高方法执行效率

多线程归并查询提高方法执行效率

多线程归并查询提高方法执行效率

场景:当我们sql优化到极致后,方法执行效率依旧不高,就可以采用多线程归并查询啦

废话不多说,直接上代码

方法主体:

//定义一个ConcurrentHashMap做为存储返回结果的容器;
ConcurrentHashMap<String,Object> map  = new ConcurrentHashMap();
final CountDownLatch countDownLatch = new CountDownLatch(unitList.size());
unitList.forEach(unit->{WorkThread workThread = new WorkThread(unit.getUnitId(), riskFeignClient, countDownLatch);workThread.init(map);workThread.start();
});
try {//主线程等待子线程执行完毕再开始继续执行countDownLatch.await();
} catch (InterruptedException e) {e.printStackTrace();
}
//对于封装的数据进行后续操作
unitList.forEach(unit -> {String unitId = unit.getUnitId();Map<String,Object> unitData = (Map<String, Object>) map.get(unitId);unit.setSocre(Integer.valueOf(unitData.get("socre").toString()));unit.setScoreLevel(unitData.get("scoreLevel").toString());
});

线程类

class WorkThread extends Thread {private String unitId;private ConcurrentHashMap<String,Object>  map ;private CountDownLatch countDownLatch;private RiskFeignClient riskFeignClient;public WorkThread(String unitId,RiskFeignClient riskFeignClient,CountDownLatch countDownLatch) {this.unitId = unitId;this.riskFeignClient = riskFeignClient;this.countDownLatch = countDownLatch;}public void init(ConcurrentHashMap<String,Object>  map ) {this.map = map;}public void run() {JSONObject jsonObject = riskFeignClient.getUnitScoreData(unitId);map.put(unitId,ResultUtil.getJSONObjectResult(jsonObject));countDownLatch.countDown();}
}

道德经全文