java8 parallel並行處理實戰

需求

  1. 我須要作一我的員某幾項數據的統計,因爲數據量較大,不能一次性加載到內存進行統計。因此採用了遍歷每一個用戶。固然也能夠分配處理。
  2. 分析需求可得知,每一個用戶其實互不相關,數據的統計能夠同步進行,所以考慮到併發執行。而java8恰好提供了這樣的功能,對集合數據的併發執行parallel,因此有了如下測試

爲加快統計速度嘗試

  1. 原代碼用時java

    • 2018-10-15 15:03:22.863 |-INFO [SimpleAsyncTaskExecutor-1] com.beikbank.settlement.api.jobs.TaskJob [147] -| statMissUser統計數據完成,用時:196.033秒
  2. java8 代碼用時數據庫

    • 2018-10-15 14:54:17.487 |-INFO [SimpleAsyncTaskExecutor-1] com.beikbank.settlement.api.jobs.TaskJob [152] -| statMissUser統計數據完成,用時:99.12秒

代碼改變

原代碼api

for (Map<String, Object> allUser : allUserList) {
    String userIdkey = allUser.get("user_id").toString();
    ...//io數據庫操做
}

使用java8 流並行代碼併發

allUserList.stream().parallel().forEach(allUser -> {
    String userIdkey = allUser.get("user_id").toString();
    ...//io數據庫操做
});

總結

  1. 數據統計存在數據庫操做的,使用java8的parallel能夠加快統計速度,從上面圖片的對比能夠看出,使用parallel後jdbc鏈接會存在多個並行執行,執行效率和機器配置內存等相關。
  2. 我使用的是window 2核4G且開了不少其餘軟件的狀況測試,效率提高1倍左右
相關文章
相關標籤/搜索