多线程 fork join 实现累加

ForkJoin框架,可做同步和异步处理,可有返回值和无返回值调用。

invokeAll为同步调用;

execute为异步调用;

RecursiveAction,用于没有返回结果的任务;

RecursiveTask,用于有返回值的任务;

这里用同步调用实现累加

package com.cz.mhm.forkjoin.sum;

import java.lang.reflect.Array;
import java.util.Random;

public class ArrayUtils {

    private static int num = 100000000; //100000000

    public static Integer[] getArrays() {
        Integer[] arr = new Integer[num];
        Random r = new Random();
        for (int i=0;i
package com.cz.mhm.forkjoin.sum.sync;

import java.util.concurrent.RecursiveTask;

public class SumTask extends RecursiveTask {

    // 以50为边界
    private static int THRESHOLD = 50;

    private Integer[] src;
    private int fromIndex;
    private int toIndex;

    public SumTask(Integer[] src, Integer fromIndex, Integer toIndex) {
        this.src = src;
        this.fromIndex = fromIndex;
        this.toIndex = toIndex;
    }

    @Override
    protected Integer compute() {
        if((toIndex - fromIndex) < THRESHOLD) {
            int count = 0;
            for (int i=fromIndex; i
package com.cz.mhm.forkjoin.sum.sync;

import com.cz.mhm.forkjoin.sum.ArrayUtils;

public class SumWithFJ {
    public static void main(String[] args) {
        Integer[] arr = ArrayUtils.getArrays();

        long c1 = System.currentTimeMillis();
        int count = 0;
        for (int i=0; i

 

你可能感兴趣的:(多线程)