Как динамически разделить задачу вычисления суммы массива на несколько CompletableFuture - PullRequest
0 голосов
/ 31 октября 2018

Как можно вычислить сумму очень большого массива одновременно, разделив на несколько CompletableFuture и попытавшись вычислить их результат асинхронно.

Для моей простой программы-примера я использую длину массива = 4 и делю на 2 CompletableFuture, но как я могу сделать процесс динамическим, если размер массива исчисляется миллионами? В идеале хотелось бы, чтобы процессор был занят, и они должны продолжать давать свой результат, как только он будет завершен, чтобы глобальная сумма возвращалась как можно скорее.

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;
    }
}
...