java并发框架--Fork-Join
并行计算


Fork-Join

关键类

例子
```
package sumTest2;
/**
* 计算1-10000000的和
* 适用范围:计算不知道计算量大小的计算
*/
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ForkJoinPool;
import java.util.concurrent.ForkJoinTask;
public class SumTest {
public static void main(String[] args) throws ExecutionException, InterruptedException {
ForkJoinPool pool = new ForkJoinPool();
SumTask task = new SumTask(1,10000000);//大任务
ForkJoinTask<Long> result = pool.submit(task);
//等待结果
do {
System.out.printf("Main: Thread Count: %d\n",pool.getActiveThreadCount());//正在运行的线程
System.out.printf("Main: Paralelism: %d\n",pool.getParallelism());//并行度
try {
Thread.sleep(50);
} catch (InterruptedException e) {
e.printStackTrace();
}
} while (!task.isDone());
System.out.println(result.get().toString());
}
}
```java
package sumTest2;
import java.util.concurrent.RecursiveTask;
//继承这个可以自动递归
public class SumTask extends RecursiveTask<Long> {
private int start;
private int end;
public SumTask(int start, int end) {
this.start = start;
this.end = end;
}
public static final int Max= 5;
@Override
protected Long compute() {
Long sum = 0L;
boolean canCompute = (end - start)<= Max;
if (canCompute){
for (int i = start; i <= end; i++){
sum += i;
}
}else{
int middle = (end + start) / 2;
SumTask subTask1 = new SumTask(start, middle);
SumTask subTask2 = new SumTask(middle+1, end);
//invokeAll(subTask1, subTask2);
subTask1.fork();
subTask2.fork();
Long sum1 = subTask1.join();
Long sum2 = subTask2.join();
sum = sum1 + sum2;
}
return sum;
}
}
java并发框架--Fork-Join的更多相关文章
- Java 并发编程 -- Fork/Join 框架
概述 Fork/Join 框架是 Java7 提供的一个用于并行执行任务的框架,是一个把大任务分割成若干个小任务,最终汇总每个小任务结果后得到大任务结果的框架.下图是网上流传的 Fork Join 的 ...
- Java并发编程--Fork/Join框架使用
上篇博客我们介绍了通过CyclicBarrier使线程同步,可是上述方法存在一个问题,那就是假设一个大任务跑了2个线程去完毕.假设线程2耗时比线程1多2倍.线程1完毕后必须等待线程2完毕.等待的过程线 ...
- JUC组件扩展(二)-JAVA并行框架Fork/Join(四):监控Fork/Join池
Fork/Join 框架是为了解决可以使用 divide 和 conquer 技术,使用 fork() 和 join() 操作把任务分成小块的问题而设计的.主要实现这个行为的是 ForkJoinPoo ...
- JUC组件扩展(二)-JAVA并行框架Fork/Join(二):同步和异步
在Fork/Join框架中,提交任务的时候,有同步和异步两种方式. invokeAll()的方法是同步的,也就是任务提交后,这个方法不会返回直到所有的任务都处理完了. fork方法是异步的.也就是你提 ...
- JUC组件扩展(二)-JAVA并行框架Fork/Join(一):简介和代码示例
一.背景 虽然目前处理器核心数已经发展到很大数目,但是按任务并发处理并不能完全充分的利用处理器资源,因为一般的应用程序没有那么多的并发处理任务.基于这种现状,考虑把一个任务拆分成多个单元,每个单元分别 ...
- Java并行任务框架Fork/Join
Fork/Join是什么? Fork意思是分叉,Join为合并.Fork/Join是一个将任务分割并行运行,然后将最终结果合并成为大任务的结果的框架,父任务可以分割成若干个子任务,子任务可以继续分割, ...
- 【fork/join】java并发编程-fork/join示例
package com.chinamobile.epic.tako.common.graphite.query.sync.impl; import com.google.common.collect. ...
- JUC组件扩展(二)-JAVA并行框架Fork/Join(三):在任务中抛出异常
在java当中,异常一共分为两种.一种是运行时异常,一种是非运行是异常. 非运行时异常:这些异常必须在方法上通过throws子句抛出.或者在方法体内进行try{…}catch{…}来捕获异常. 运行时 ...
- Java 并发系列之十:java 并发框架(2个)
1. Fork/Join框架 2. Executor框架 3. ThreadPoolExecutor 4. ScheduledThreadPoolExecutor 5. FutureTask 6. t ...
- java 中的fork join框架
文章目录 ForkJoinPool ForkJoinWorkerThread ForkJoinTask 在ForkJoinPool中提交Task java 中的fork join框架 fork joi ...
随机推荐
- jQuery-File-Upload 使用,jQuery-File-Upload上传插件
================================ ©Copyright 蕃薯耀 2020-01-10 https://www.cnblogs.com/fanshuyao/ 一.官网地址 ...
- CallContext类
CallContext类 转载weixin_30723433 最后发布于2019-07-20 10:42:24 阅读数 133 收藏 展开 System.Runtime.Remoting.Messa ...
- webscarab
1.功能 WebScarab是一个用来分析使用HTTP和HTTPS协议的应用程序框架.其原理很简单,WebScarab可以记录它检测到的会话内容(请求和应答),并允许使用者可以通过多种形式来查看记录. ...
- yolov3 讲解
参考博客:https://blog.csdn.net/litt1e/article/details/88907542
- Oracle用户权限授权以及索引、同义词、分区
本文为原创,如需转载,请标明出处 http://www.cnblogs.com/gudu1/p/7601765.html ---- 用户权限 1.创建表空间 (创建用户之前需要创建表空间和临时表空间, ...
- 第四十四篇 入门机器学习——matplotlib基础——实现数据可视化
No.1. 绘制一条正弦曲线 No.2. 在一张图中绘制多条曲线 No.3. 可以为曲线指定颜色.线条样式 No.4. 可以指定横纵坐标轴的范围 也可以使用: No.6. 可以为每条曲线添加图示 No ...
- 以管理员身份运行 Microsoft Edge 时不支持登录
之前一直用 edge chromium bate版本 一直不能登录 今天试了正式版 还是这样 然后百度一大堆没找到解决方案 设置兼容性为windown7 是可以的 但是 UI显示会有问题 再次打开 又 ...
- 用python实现密码校验程序
密码需要符合下面的要求: 8个字符以上,包含数字,大小写,开头不能为特殊字符. #! /usr/bin/pythonimport re password = str(input()) def lenO ...
- caffe.bin用法
$ ./build/tools/caffe.bin caffe.bin: command line brew usage: caffe <command><aegs> comm ...
- jumpserver 常见错误解决
官方链接:https://jumpserver.readthedocs.io/zh/master/faq_install.html 重启jumpserver后台 #cd /opt#python3.6 ...