Java中Fork/Join框架
来源:互联网 发布:考试宝典软件 编辑:程序博客网 时间:2024/06/18 06:06
分割任务,然后把子任务的结果再合并起来。分治的思想。
import java.util.concurrent.ForkJoinPool;import java.util.concurrent.Future;import java.util.concurrent.RecursiveTask;public class CountTask extends RecursiveTask<Integer>{/** * */private static final long serialVersionUID = 1L;private static final int THRESHOLD = 1000;private int start;private int end;public CountTask(int start, int end) {this.start = start;this.end = end;}@Overrideprotected Integer compute() {int sum = 0;boolean canCompute = (end - start) <= THRESHOLD;if (canCompute) {for (int i = start; i <= end; i++)sum += i;} else {//如果任务大于阀值,就分裂成两个子任务计算int mid = (start + end) / 2;CountTask leftTask = new CountTask(start, mid);CountTask rightTask = new CountTask(mid+1, end);//执行子任务leftTask.fork();rightTask.fork();//等待子任务执行完,并得到结果int leftResult = (int)leftTask.join();int rightResult = (int)rightTask.join();sum = leftResult + rightResult;}return sum;}public static void main(String[] args) {ForkJoinPool forkJoinPool = new ForkJoinPool(); //生成一个计算资格,负责计算1+2+3+4 CountTask task = new CountTask(1, 100000000); Future<Integer> result = forkJoinPool.submit(task); try { long start = System.currentTimeMillis(); System.out.println(result.get()); System.out.println("所用时长: " + (System.currentTimeMillis() - start) + "毫秒");} catch (Exception e) {}}}
下面是用单线程的跑的时间,一个for跑的。
阅读全文
0 0
- Java中Fork/Join框架
- java Fork-join框架
- Java Fork/join框架
- JAVA Fork/Join 框架
- Java Fork Join 框架
- Java Fork/Join框架
- Java 7 Fork/Join 框架
- Java 7 Fork/Join 框架
- Java 7 Fork/Join 框架
- java Fork/Join框架介绍
- Java并发-Fork/Join框架
- 《Java Fork/Join框架介绍》
- JAVA中的Fork/Join框架
- Java 7 Fork/Join 框架
- Java并发框架Fork/Join
- Java线程之fork/join框架
- Java多线程之fork/join框架详解
- Fork/Join 框架 in Java 摘要&前言
- 第十四周【项目
- UI5开发 – 创建OData Model
- 添加,删除,全选,批量,的数据
- Git 基础
- C#算法系列(8)——线性表
- Java中Fork/Join框架
- Linux下的gdb调试
- C语言斐波那契的递归函数 Fibonacci
- 文章标题
- Map排序
- Python自学之路第五步——遍历列表以及创建数值列表
- Node.js学习(一):初探Node.js
- 生成带有参数的二维码
- 51Nod 1138 连续整数的和