其他分享
首页 > 其他分享> > 利用Fork-Join计算1-100的和 ,会把数组放入数组

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

作者:互联网

/**
 * @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