ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

利用Fork-Join计算1-100的和 ,会把数组放入数组

2021-12-14 21:33:27  阅读:144  来源: 互联网

标签:Fork endIndex arr Join int private source startIndex 数组


/**
 * @Author zh
 * @Description 利用Fork-Join计算1-100的和 ,会把数组放入数组
 * @Date 2021/12/14
 */
/*
一个大的任务拆分成多个子任务进行并行处理,
最后将子任务结果合并成最后的计算结果,并进行输出。
 */
public class MyTask extends RecursiveTask<Integer>{
    //拆分的标准
    private static final int COUNT=5;

    //定义原数组
    private int[] source;
    //开始下标
    private int startIndex;
    //结束下标
    private int endIndex;

    public MyTask(int[] source, int startIndex, int endIndex) {
        this.source = source;
        this.startIndex = startIndex;
        this.endIndex = endIndex;
    }

    //拆分的方法
    @Override
    protected Integer compute() {
        //1.判断标准
        if (endIndex-startIndex<=COUNT){
            //总和
            int sum =0;
            for (int i=startIndex;i<=endIndex;i++){
                sum+=source[i];
            }
            return sum;
        }else {
            int mid=(endIndex+startIndex)/2;
            MyTask left =new MyTask(source,startIndex,mid);
            MyTask right =new MyTask(source,mid+1,endIndex);

            //继续用递归 invokeAll();
            left.fork();
            right.fork();
            //进行合并
            return left.join()+right.join();
        }

    }
}
public class TMain {
    public static void main(String[] args) {
        int[] arr =new int[101];
        for (int i = 0; i < 101; i++) {
            arr[i]=i;
        }
        System.out.println(Arrays.toString(arr));

        //1.任务池
        ForkJoinPool pool =new ForkJoinPool();

        //2.任务
        MyTask myTask =new MyTask(arr,0,arr.length-1);

        //3.把任务交给池管理
        pool.invoke(myTask);

        //4.获取结果
        Integer join = myTask.join();

        System.out.println(join);
    }
}

 

标签:Fork,endIndex,arr,Join,int,private,source,startIndex,数组
来源: https://www.cnblogs.com/superA8/p/15690059.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有