如何通过划分为多个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;
}
}