JAVA Fork/Join 框架
2015-08-07 11:08
453 查看
JAVA Fork/Join 框架是一个任务并行计算框架,将大任务划分为小任务,分而治之
核心操作
fork:将大任务划分为小任务
join: 任务等待其创建的任务的结束
核心类
ForkJoinPool:ForkJoinTask需要通过ForkJoinPool来执行,实现ExecutorService接口和work-stealing算法,管理工作线程和提供关于任务的状态和它们执行的信息
ForkJoinTask:提供fork、join操作,它有两个子类,RecursiveAction没有返回结果的任务和RecursiveTask 有返回结果的任务
例子
执行结果
Fibonacci(0)=1
Fibonacci(1)=1
Fibonacci(2)=2
Fibonacci(3)=3
Fibonacci(4)=5
Fibonacci(5)=8
Fibonacci(6)=13
Fibonacci(7)=21
参考链接
http://www.williamsang.com/archives/1724.html
http://ifeve.com/fork-join-1/
http://www.infoq.com/cn/articles/fork-join-introduction
核心操作
fork:将大任务划分为小任务
join: 任务等待其创建的任务的结束
核心类
ForkJoinPool:ForkJoinTask需要通过ForkJoinPool来执行,实现ExecutorService接口和work-stealing算法,管理工作线程和提供关于任务的状态和它们执行的信息
ForkJoinTask:提供fork、join操作,它有两个子类,RecursiveAction没有返回结果的任务和RecursiveTask 有返回结果的任务
例子
import java.util.concurrent.ExecutionException; import java.util.concurrent.ForkJoinPool; import java.util.concurrent.Future; import java.util.concurrent.RecursiveTask; public class JavaForkJoin extends RecursiveTask<Integer>{ private int n; public JavaForkJoin(int n) {this.n=n;} @Override //模拟斐波那契数列 protected Integer compute() { // TODO Auto-generated method stub int sum=0; if(n<=1) sum=1; else { JavaForkJoin f1=new JavaForkJoin(n-1); f1.fork(); JavaForkJoin f2=new JavaForkJoin(n-2); f2.fork(); sum=f1.join()+f2.join(); } return sum; } public static void main(String[] args) throws InterruptedException, ExecutionException { // TODO Auto-generated method stub ForkJoinPool pool=new ForkJoinPool(); for(int n=0;n<8;n++) { Future<Integer> result=pool.submit(new JavaForkJoin(n)); System.out.println("Fibonacci("+n+")="+result.get()); } } }
执行结果
Fibonacci(0)=1
Fibonacci(1)=1
Fibonacci(2)=2
Fibonacci(3)=3
Fibonacci(4)=5
Fibonacci(5)=8
Fibonacci(6)=13
Fibonacci(7)=21
参考链接
http://www.williamsang.com/archives/1724.html
http://ifeve.com/fork-join-1/
http://www.infoq.com/cn/articles/fork-join-introduction
相关文章推荐
- SQL 外链接操作小结 inner join left join right join
- SQL语句的并集UNION 交集JOIN(内连接,外连接)等介绍
- 浅谈SQL Server中的三种物理连接操作(性能比较)
- oracle中left join和right join的区别浅谈
- MySQL JOIN之完全用法
- mysql多表join时候update更新数据的方法
- SQL中的left join right join
- SQL的Join使用图解教程
- SQL Join的一些总结(实例)
- union这个连接是有什么用的和INNER JOIN有什么区别
- python分割和拼接字符串
- C#多线程之Thread中Thread.Join()函数用法分析
- JavaScript中join()方法的使用简介
- awk实现Left、join查询、去除重复值以及局部变量讲解例子
- SQL之left join、right join、inner join的区别浅析
- MySQL中视图的使用及多表INNER JOIN的技巧分享
- 在MySQL中使用JOIN语句进行连接操作的详细教程
- SQL中JOIN和UNION区别、用法及示例介绍
- 深入理解mysql之left join 使用详解
- 浅析Mysql Join语法以及性能优化