jdk Fork/Join 并发编程-RecursiveTask

前言

        在Java SE7中,fork/join框架被加到了java.util.concurrent包中。ForkJoinTask对象支持创建子任务来等待子任务完成。

 

ForkJoinTask对象主要有两个重要的方法:

fork():方法允许ForkJoinTask任务异步执行,也允许一个新的ForkJoinTask从存在的ForkJoinTask中被启动。
join():方法允许一个ForkJoinTask等待另一个ForkJoinTask执行完成。

 

两种类型的ForkJoinTask的定义:

RecursiveAction:代表执行没有返回结果。
RecursiveTask:代表执行会有返回值。

通常,RecursiveTask是首选的,因为大部分分而治之的算法会在数据集上计算后返回结果。对于任务的执行,不同的同步和异步选项是可选的,这样就可以实现复杂的模式。

代码示例

 
1,新建类Fibonacci,继承RecursiveTask,实现方法compute()

 

2,新建普通类TestModel,定义一个计算方法

 

3,新建MyFork验证
运行结果:

线程ID:10
线程ID:12
线程ID:11
线程ID:9
计算结果:14
用时:1005

线程ID:1
线程ID:1
线程ID:1
线程ID:1
计算结果:14
用时:4002

从结果可以看出多线程并发执行的效果是杠杠的!!!
 
一些参数解释:
1,RecursiveTask<Integer>的Integer为返回参数类型,类型声明为Object
2,private int compute(int no) 的返回类型对应RecursiveTask<Integer>的Integer
3,Fibonacci 类里的变量为入参,入参通过构造方法进行赋值
 
文档:
http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/RecursiveTask.html

guolin

guolin

相信世界,向往美好,记录成长过程,分享个人心得,充实平凡生活。 网站信条:因为喜欢,所以热爱。

发表评论

电子邮件地址不会被公开。 必填项已用*标注