首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【Java 并发编程】ForkJoin 框架使用代码实例

【Java 并发编程】ForkJoin 框架使用代码实例

作者头像
一个会写诗的程序员
发布2020-06-04 15:04:56
3880
发布2020-06-04 15:04:56
举报

在文章

JUC并行计算框架 Fork/Join 原理图文详解&代码示例

中,我们详细介绍了 ForkJoin 框架 的原理,这里我们再给出一个代码实例:

package i.juc;

import java.util.Arrays;
import java.util.List;

/**
 * @author: Jack
 * 2020-06-03 10:20
 */
public class ForkJoinTest {
    public static void main(String[] args) {
        List<String> list = Arrays.asList("1", "2", "3", "4", "5", "6", "7", "8", "9");

        ForkJoinTaskDemo demo = new ForkJoinTaskDemo(list);
        List<ReportLine> result = demo.compute();

        System.out.println(result);

    }
}
package i.juc;

import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.RecursiveTask;
import java.util.stream.Collectors;

/**
 * @author: Jack
 * 2020-06-03 10:16
 */
public class ForkJoinTaskDemo extends RecursiveTask<List<ReportLine>> {

    List<String> workNoList;

    public ForkJoinTaskDemo(List<String> workNoList) {
        this.workNoList = workNoList;
    }

    @Override
    protected List<ReportLine> compute() {
        try {
            Thread.sleep(1000L);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        if (workNoList.size() > 0 && workNoList.size() <= 3) {
            return workNoList.stream().map(ReportLine::new).collect(Collectors.toList());
        }

        List<String> list1 = workNoList.subList(0, 3);
        List<String> list2 = workNoList.subList(3, 6);
        List<String> list3 = workNoList.subList(6, 9);

        ForkJoinTaskDemo t1 = new ForkJoinTaskDemo(list1);
        ForkJoinTaskDemo t2 = new ForkJoinTaskDemo(list2);
        ForkJoinTaskDemo t3 = new ForkJoinTaskDemo(list3);

        invokeAll(t1, t2, t3);

        List<ReportLine> result = new ArrayList<>();

        List<ReportLine> result1 = t1.join();
        List<ReportLine> result2 = t2.join();
        List<ReportLine> result3 = t3.join();

        result.addAll(result1);
        result.addAll(result2);
        result.addAll(result3);

        return result;

    }

}

class ReportLine {
    String id;

    public ReportLine(String id) {
        this.id = id;
    }

    @Override
    public String toString() {
        return "ReportLine{" +
            "id='" + id + '\'' +
            '}';
    }
}

Kotlin开发者社区

专注分享 Java、 Kotlin、Spring/Spring Boot、MySQL、redis、neo4j、NoSQL、Android、JavaScript、React、Node、函数式编程、编程思想、"高可用,高性能,高实时"大型分布式系统架构设计主题。

High availability, high performance, high real-time large-scale distributed system architecture design

分布式框架:Zookeeper、分布式中间件框架等

分布式存储:GridFS、FastDFS、TFS、MemCache、redis等

分布式数据库:Cobar、tddl、Amoeba、Mycat

云计算、大数据、AI算法

虚拟化、云原生技术

分布式计算框架:MapReduce、Hadoop、Storm、Flink等

分布式通信机制:Dubbo、RPC调用、共享远程数据、消息队列等

消息队列MQ:Kafka、MetaQ,RocketMQ

怎样打造高可用系统:基于硬件、软件中间件、系统架构等一些典型方案的实现:HAProxy、基于Corosync+Pacemaker的高可用集群套件中间件系统

Mycat架构分布式演进

大数据Join背后的难题:数据、网络、内存和计算能力的矛盾和调和

Java分布式系统中的高性能难题:AIO,NIO,Netty还是自己开发框架?

高性能事件派发机制:线程池模型、Disruptor模型等等。。。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • JUC并行计算框架 Fork/Join 原理图文详解&代码示例
  • Kotlin开发者社区
相关产品与服务
大数据
全栈大数据产品,面向海量数据场景,帮助您 “智理无数,心中有数”!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档