利用java異步編程的操作,將分解的sql異步執行並最終匯總數據。這里用到了CountDownLatch和ExecutorService,
// 獲取時間段所有天數
List<String> days = MyDateUtils.getDays(requestParams.getStartTime(), requestParams.getEndTime());
// 天數長度
int length = days.size();
// 初始化合並集合,並指定大小,防止數組越界
List<你想要的數據類型> list = Lists.newArrayListWithCapacity(length);
// 初始化線程池
ExecutorService pool = Executors.newFixedThreadPool(length);
// 初始化計數器
CountDownLatch latch = new CountDownLatch(length);
// 查詢每天的時間並合並
for (String day : days) {
Map<String, Object> param = Maps.newHashMap();
// param 組裝查詢條件
pool.submit(new Runnable() {
@Override
public void run() {
try {
// mybatis查詢sql
// 將結果匯總
list.addAll(查詢結果);
} catch (Exception e) {
logger.error("getTime異常", e);
} finally {
//線程結束-1
latch.countDown();
}
}
});
}
try {
// 等待所有查詢結束
//暫停當前線程,死循環 判斷線程數是否結束
latch.await();
} catch (InterruptedException e) {
e.printStackTrace();
}
// list為匯總集合
// 如果有必要,可以組裝下你想要的業務數據,計算什么的,如果沒有就沒了