美文网首页Kotlin 并发编程艺术Kotlin 程序设计Java Web 核心技术
【Java 并发编程】ForkJoin 框架使用代码实例

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

作者: 光剑书架上的书 | 来源:发表于2020-06-03 11:27 被阅读0次

    在文章

    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模型等等。。。

    合抱之木,生于毫末;九层之台,起于垒土;千里之行,始于足下。不积跬步,无以至千里;不积小流,无以成江河。

    相关文章

      网友评论

        本文标题:【Java 并发编程】ForkJoin 框架使用代码实例

        本文链接:https://www.haomeiwen.com/subject/vzpvzhtx.html