多線程之異步查詢匯總數據


利用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為匯總集合
// 如果有必要,可以組裝下你想要的業務數據,計算什么的,如果沒有就沒了


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM