利用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 組裝查詢條件java
pool.submit(new Runnable() {
@Override
public void run() {
try {
// mybatis查詢sql
// 將結果彙總
list.addAll(查詢結果);
} catch (Exception e) {
logger.error("getTime異常", e);
} finally {
//線程結束-1
latch.countDown();
}
}
});
}sql
try {
// 等待全部查詢結束
//暫停當前線程,死循環 判斷線程數是否結束
latch.await();
} catch (InterruptedException e) {
e.printStackTrace();
}
// list爲彙總集合
// 若是有必要,能夠組裝下你想要的業務數據,計算什麼的,若是沒有就沒了
編程