当前位置:网站首页>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));
}
}
边栏推荐
- Database problems, how to optimize Oracle SQL query statements faster and more efficient
- 69 Cesium代码datasource加载geojson
- FPGA - 7系列 FPGA内部结构之Clocking -01- 时钟架构概述
- golang panic recover自定义异常处理
- jdbc-连接池
- ABP 学习解决方案中的项目以及依赖关系
- 【ManageEngine卓豪】局域网监控的作用
- 让厦门灌口镇田头村变“甜头”村的特色农产品之一是
- HDU - 1501 Zipper(记忆化深搜)
- Advanced drawing skills of Excel lecture 100 (1) - use Gantt chart to show the progress of the project
猜你喜欢

SystemVerilog学习-10-验证量化和覆盖率

Small guide for rapid completion of mechanical arm (VI): stepping motor driver
![[file system] how to run squashfs on UBI](/img/d7/a4769420c510c47f3c2a615b514a8e.png)
[file system] how to run squashfs on UBI

TIDB数据库特性总结

Tidb single machine simulation deployment production environment cluster (closed pit practice, personal test is effective)

分布式锁实现

uniapp树形层级选择器

Fixed height of the first column in El table dynamic header rendering

linux 关闭redis 进程 systemd+

Cjc8988 Low Power Stereo codec with 2 stereo headphone drivers
随机推荐
Geoffrey Hinton: my 50 years of in-depth study and Research on mental skills
【自动化运维】自动化运维平台有什么用
highmap gejson数据格式转换脚本
[file system] how to run squashfs on UBI
Freeswitch dial the extension number
El tooltip in the table realizes line breaking display
Kubedm builds kubenetes cluster (Personal Learning version)
阶乘约数(唯一分解定理)
记磁盘扇区损坏导致的Mysql故障排查
MySQL里记录货币
golang panic recover自定义异常处理
Differences between in and exists in MySQL
MinIO纠错码、分布式MinIO集群搭建及启动
OpenGL es: (2) relationship between OpenGL es, EGL and glsl
Fragment upload and breakpoint resume
Flink practice -- multi stream merge
蚂蚁新村田头村变甜头村 让厦门灌口镇田头村变甜头村的特色农产品之一是
可动的机械挂钟
HDU - 1501 Zipper(记忆化深搜)
【企业数据安全】升级备份策略 保障企业数据安全