Junior — Middle
Welke methoden kunnen worden gebruikt om de parallelle berekening van de som van de elementen van een array met behulp van ForkJoinPool te implementeren?
sobes.tech AI
Antwoord van AI
Om de som van de elementen van een array parallel te berekenen met behulp van ForkJoinPool, kun je een recursieve taak implementeren die de array in delen splitst en deze parallel optelt.
Belangrijkste idee:
- Als de grootte van de subarray klein is, bereken dan de som direct.
- Anders, deel de subarray in twee delen, maak twee subtaken, voer ze parallel uit en combineer de resultaten.
Voorbeeld in Java met RecursiveTask<Integer>:
import java.util.concurrent.*;
public class SumTask extends RecursiveTask<Integer> {
private static final int THRESHOLD = 1000;
private int[] array;
private int start, end;
public SumTask(int[] array, int start, int end) {
this.array = array;
this.start = start;
this.end = end;
}
@Override
protected Integer compute() {
int length = end - start;
if (length <= THRESHOLD) {
int sum = 0;
for (int i = start; i < end; i++) {
sum += array[i];
}
return sum;
} else {
int mid = start + length / 2;
SumTask leftTask = new SumTask(array, start, mid);
SumTask rightTask = new SumTask(array, mid, end);
leftTask.fork(); // start linker taak asynchroon
int rightResult = rightTask.compute(); // bereken rechter taak in huidige thread
int leftResult = leftTask.join(); // wacht op resultaat linker taak
return leftResult + rightResult;
}
}
}
// Gebruik:
// ForkJoinPool pool = new ForkJoinPool();
// int[] data = ...;
// int totalSum = pool.invoke(new SumTask(data, 0, data.length));
Deze aanpak maakt efficiënt gebruik van multithreading om de som van een grote array te versnellen.