Java中Fork/Join框架指什么呢?
下文笔者讲述Java中Fork/Join框架的简介说明,如下所示
Fork/Join框架简介说明
Java中Fork/Join框架
是一种并行处理框架
用于处理递归式的分治问题
其采用的是将大任务拆分成小任务
然后分配给多个线程同时处理
最后将结果聚合起来得到最终结果
Fork/Join框架提供一个ForkJoinPool线程池来管理线程
它继承自Java中的ThreadPoolExecutor线程池
例:Fork/Join示例
import java.util.concurrent.ForkJoinPool;
import java.util.concurrent.RecursiveTask;
public class FibonacciTask extends RecursiveTask {
private static final long serialVersionUID = 1L;
final int n;
FibonacciTask(int n) {
this.n = n;
}
protected Integer compute() {
if (n <= 1)
return n;
FibonacciTask f1 = new FibonacciTask(n - 1);
f1.fork();
FibonacciTask f2 = new FibonacciTask(n - 2);
return f2.compute() + f1.join();
}
public static void main(String[] args) {
ForkJoinPool forkJoinPool = new ForkJoinPool();
FibonacciTask task = new FibonacciTask(7);
System.out.println("结果是:" + forkJoinPool.invoke(task));
}
}
代码说明
上述的代码中
定义一个FibonacciTask类
它继承自RecursiveTask类
RecursiveTask是Fork/Join框架中用于处理有返回值的任务的抽象类
在FibonacciTask类中
覆盖compute方法
用于运行任务
在compute方法中
先判断n是否小于等于1
如果是,则直接返回n
否则,我们将任务分为两个子任务
一个是计算n-1的斐波那契数列
另一个是计算n-2的斐波那契数列
其中
f1.fork()表示启动子任务f1
让它在ForkJoinPool线程池中异步执行
而f2.compute()表示在当前线程中直接执行子任务f2。
===================================
在main方法中
使用ForkJoinPool线程池来管理线程
并使用invoke方法来启动根任务
等待计算结果的返回
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。


