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方法来启动根任务 等待计算结果的返回
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。