Java中Fork/Join框架指什么呢?

重生 Java经验 发布时间:2023-12-12 21:26:40 阅读数:17354 1
下文笔者讲述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方法来启动根任务
       等待计算结果的返回
版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

本文链接: https://www.Java265.com/JavaJingYan/202312/17023876517435.html

最近发表

热门文章

好文推荐

Java265.com

https://www.java265.com

站长统计|粤ICP备14097017号-3

Powered By Java265.com信息维护小组

使用手机扫描二维码

关注我们看更多资讯

java爱好者