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倍左右
相关文章
相关标签/搜索