如何将计算数组和的任务动态划分为多个CompletableFuture

时间:2018-10-31 05:08:33

标签: java concurrency java.util.concurrent

如何通过划分为多个CompletableFuture并尝试异步计算其结果来同时计算非常大的数组之和。

对于我的简单示例程序,我使用数组length = 4并分成2 CompletableFuture,但是如果数组大小为百万,如何使过程动态化。理想情况下,希望保持CPU的占用,并且他们应该尽快给出完整的结果,以便尽快返回全局和。

public class Parallelism {

    public static void main(String[] args) {

        int[] arr = new int[]{1,2,3,4};

        //sum = 10
        int n = arr.length;

        CompletableFuture<Integer> first = CompletableFuture.supplyAsync(() -> {
           return sum(arr, 0, 1);
        });


        CompletableFuture<Integer> second = CompletableFuture.supplyAsync(() -> {
            return sum(arr, 2, n-1);
        });

        int sum = 0;

        sum += first.join();

        sum += second.join();

        assert sum == 10;
    }

    private static int sum(int[] arr, int start, int end) {
        int sum = 0;
        for(int i = start; i <= end; i++) {
            sum += arr[i];
        }
        return sum;
    }
}

0 个答案:

没有答案