博客
关于我
26. ForkJoin:单机版的MapReduce - 并发工具类
阅读量:386 次
发布时间:2019-03-05

本文共 2478 字,大约阅读时间需要 8 分钟。

???????ForkJoin??

??????

????????????????????????????????????????????????????????????????????????????

  • ??????????????????????????????????????
  • ??????????????????????????????
  • Fork/Join???

    Fork/Join???Java???????????????????????????????????????

    • Fork?????????fork()????????????????????
    • Join?????????join()?????????????????

    ForkJoin?????????????

  • ForkJoinPool????????????????ForkJoin???????????????????????????
  • ForkJoinTask???????????????????????????
    • fork()??????????
    • join()??????????????
  • ForkJoinTask????????

  • RecursiveAction?????????????????????????
  • RecursiveTask????????????????????????
  • ForkJoinPool????

    ForkJoinPool??????????-???????????????????????ForkJoinPool????????????????????????????????????????????????????????????????

    ForkJoinPool??????????????????????????????????

    ??MapReduce??????

    MapReduce???????????????????????????MapReduce??????????

    public class MyTest2 {    public static void main(String[] args) {        String[] fc = {            "hello world", "hello me", "hello fork", "hello join",            "fork join in world"        };        ForkJoinPool fjp = new ForkJoinPool(3);        MR mr = new MR(fc, 0, fc.length);        Map
    result = fjp.invoke(mr); result.forEach((k, v) -> System.out.println(k + ":" + v)); } static class MR extends RecursiveTask
    > { private String[] fc; private int start, end; MR(String[] fc, int fr, int to) { this.fc = fc; this.start = fr; this.end = to; } @Override protected Map
    compute() { if (end - start == 1) { return calc(fc[start]); } else { int mid = (start + end) / 2; MR mr1 = new MR(fc, start, mid); mr1.fork(); MR mr2 = new MR(fc, mid, end); return merge(mr2.compute(), mr1.join()); } } private Map
    merge(Map
    r1, Map
    r2) { Map
    result = new HashMap<>(); result.putAll(r1); r2.forEach((k, v) -> { Long c = result.get(k); if (c != null) { result.put(k, c + v); } else { result.put(k, v); } }); return result; } private Map
    calc(String line) { Map
    result = new HashMap<>(); String[] words = line.split("\\s+"); for (String w : words) { Long v = result.get(w); if (v != null) { result.put(w, v + 1L); } else { result.put(w, 1L); } } return result; } }}

    ??????MR???????????????????????ForkJoin?????????????????????????????????

    转载地址:http://hihwz.baihongyu.com/

    你可能感兴趣的文章
    OSG学习:场景图形管理(一)——视图与相机
    查看>>
    OSG学习:场景图形管理(三)——多视图相机渲染
    查看>>
    OSG学习:场景图形管理(二)——单窗口多相机渲染
    查看>>
    OSG学习:场景图形管理(四)——多视图多窗口渲染
    查看>>
    OSG学习:新建C++/CLI工程并读取模型(C++/CLI)——根据OSG官方示例代码初步理解其方法
    查看>>
    Sql 随机更新一条数据返回更新数据的ID编号
    查看>>
    OSG学习:空间变换节点和开关节点示例
    查看>>
    OSG学习:纹理映射(一)——多重纹理映射
    查看>>
    OSG学习:纹理映射(七)——聚光灯
    查看>>
    OSG学习:纹理映射(三)——立方图纹理映射
    查看>>
    OSG学习:纹理映射(二)——一维/二维/简单立方图纹理映射
    查看>>
    OSG学习:纹理映射(五)——计算纹理坐标
    查看>>
    OSG学习:纹理映射(六)——灯光
    查看>>
    OSG学习:纹理映射(四)——三维纹理映射
    查看>>
    OSI七层模型的TCP/IP模型都有哪几层和他们的对应关系?
    查看>>
    OSM数据如何下载使用(地图数据篇.11)
    查看>>
    OSPF 四种设备角色:IR、ABR、BR、ASBR
    查看>>
    OSPF 概念型问题
    查看>>
    SQL Server 存储过程分页。
    查看>>
    OSPF不能发现其他区域路由时,该怎么办?
    查看>>