在文章
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模型等等。。。
合抱之木,生于毫末;九层之台,起于垒土;千里之行,始于足下。不积跬步,无以至千里;不积小流,无以成江河。
网友评论