当前位置:网站首页>ForkJoin和Stream流测试
ForkJoin和Stream流测试
2022-07-01 06:09:00 【qq_52025208】
什么是ForkJoin?
ForkJoin 在 JDK 1.7 , 并行执行任务!提高效率。大数据量! 大数据:Map Reduce (把大任务拆分为小任务)
ForkJoin特点:工作窃取
ForkJoinPool内部原理-工作窃取
在 ForkJoinPool 中,线程池中每个工作线程(ForkJoinWorkerThread)都对应一个任务队列(WorkQueue),工作线程优先处理来自自身队列的任务(LIFO或FIFO顺序,参数 mode 决定),然后以FIFO的顺序随机窃取其他队列中的任务。
import java.util.concurrent.RecursiveTask;
/** * 求和计算的任务! * 3000 6000(ForkJoin) 9000(Stream并行流) * // 如何使用 forkjoin * // 1、forkjoinPool 通过它来执行 * // 2、计算任务 forkjoinPool.execute(ForkJoinTask task) * // 3. 计算类要继承 ForkJoinTask */
public class ForkJoinDemo extends RecursiveTask<Long> {
private Long start;
private Long end;
//临界值
private Long tmp = 10000L;
public ForkJoinDemo(Long start, Long end) {
this.start = start;
this.end = end;
}
// 计算方法
@Override
protected Long compute() {
if ((end-start)<tmp){
Long sum = 0L;
for (Long i = start; i <= end; i++) {
sum += i;
}
return sum;
}else {
// forkjoin 递归
long middle = (start + end) / 2; // 中间值
ForkJoinDemo task1 = new ForkJoinDemo(start, middle);
task1.fork(); // 拆分任务,把任务压入线程队列
ForkJoinDemo task2 = new ForkJoinDemo(middle+1, end);
task2.fork(); // 拆分任务,把任务压入线程队列
return task1.join() + task2.join();
}
}
}
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ForkJoinPool;
import java.util.concurrent.ForkJoinTask;
import java.util.stream.LongStream;
public class Main {
public static void main(String[] args) throws ExecutionException, InterruptedException {
// test1();
// test2();
test3();
}
// 普通程序员
public static void test1(){
Long sum = 0L;
long start = System.currentTimeMillis();
for (Long i = 1L; i <= 10_0000_0000; i++) {
sum += i;
}
long end = System.currentTimeMillis();
System.out.println("sum="+sum+" 时间:"+(end-start));
}
// 会使用ForkJoin
public static void test2() throws ExecutionException, InterruptedException {
long start = System.currentTimeMillis();
ForkJoinPool pool = new ForkJoinPool();
ForkJoinTask<Long> task = new ForkJoinDemo(0L,10_0000_0000L);
ForkJoinTask<Long> submit = pool.submit(task);
Long sum = submit.get();
long end = System.currentTimeMillis();
System.out.println("sum="+sum+" 时间:"+(end-start));
}
// Stream并行流 ():range (]:rangeClosed
public static void test3(){
long start = System.currentTimeMillis();
long sum = LongStream.rangeClosed(0L,10_0000_0000L).parallel().reduce(0,Long::sum);
long end = System.currentTimeMillis();
System.out.println("sum="+sum +"时间:"+(end-start));
}
}
边栏推荐
- Flink practice -- multi stream merge
- HDU - 1501 zipper (memory deep search)
- Thoughts on a "01 knapsack problem" expansion problem
- Pychart configuring jupyter
- Flink实战--多流合并
- Differences between in and exists in MySQL
- Index method and random forest to realize the information of surface water body in wet season in Shandong Province
- 【文件系统】如何在ubi之上运行squashfs
- three.js小结
- 无限水平大理石游戏
猜你喜欢

无限水平大理石游戏

Distributed lock implementation

Make Tiantou village sweet. Is Xianjing taro or cabbage the characteristic agricultural product of Tiantou Village

three. JS summary

68 Cesium代码datasource加载czml

记磁盘扇区损坏导致的Mysql故障排查

The row and column numbers of each pixel of multi-source grid data in the same area are the same, that is, the number of rows and columns are the same, and the pixel size is the same

让厦门灌口镇田头村变甜头村的特色农产品之一是蚂蚁新村

What if the data in the cloud disk is harmonious?

C# ManualResetEvent 类的理解
随机推荐
浏览器端保存数据到本地文件
Smartinstantiationawarebeanpostprocessor of the extension point series determines which construction method to execute - Chapter 432
El tooltip in the table realizes line breaking display
局域网监控软件有哪些功能
OpenGL es: (3) EGL, basic steps of EGL drawing, eglsurface, anativewindow
1034 Head of a Gang
srpingboot security demo
Small guide for rapid completion of mechanical arm (VI): stepping motor driver
Fragment upload and breakpoint resume
SystemVerilog学习-07-类的继承和包的使用
讓田頭村變甜頭村的特色農產品是仙景芋還是白菜
linux 关闭redis 进程 systemd+
MinIO纠错码、分布式MinIO集群搭建及启动
Essay learning record essay multi label Global
FPGA - 7系列 FPGA内部结构之Clocking -01- 时钟架构概述
3D printer threading: five simple solutions
c# Xml帮助类
Kubedm builds kubenetes cluster (Personal Learning version)
Stack Title: parsing Boolean expressions
ONEFLOW source code parsing: automatic inference of operator signature