zoukankan      html  css  js  c++  java
  • java8 parallel并行处理实战

    需求

    1. 我需要做一个人员某几项数据的统计,由于数据量较大,不能一次性加载到内存进行统计。所以采用了遍历每个用户。当然也可以分配处理。
    2. 分析需求可得知,每个用户其实互不相关,数据的统计可以同步进行,因此考虑到并发执行。而java8刚好提供了这样的功能,对集合数据的并发执行parallel,所以有了以下测试

    为加快统计速度尝试

    1. 原代码用时

      • 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秒

    代码改变

    原代码

    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倍左右
  • 相关阅读:
    (大数 小数点) 大明A+B hdu1753
    (大数 万进制) N! hdu1042
    (next_permutation) 排列2 hdu 1716
    (set)产生冠军 hdu2094
    (Set) {A} + {B} hdu1412
    (set stringstream)单词数 hdu2072
    (set)MG loves gold hdu6019
    (set) 人见人爱A-B hdu2034
    (map)水果 hdu1263
    (map)What Are You Talking About hdu1075
  • 原文地址:https://www.cnblogs.com/sky-chen/p/9791203.html
Copyright © 2011-2022 走看看