Junior — Middle
Welche Methoden können verwendet werden, um die parallele Berechnung der Summe der Elemente eines Arrays mit ForkJoinPool zu implementieren?
sobes.tech KI
Antwort von AI
Um die Summe der Elemente eines Arrays parallel mit ForkJoinPool zu berechnen, kann man eine rekursive Aufgabe implementieren, die das Array in Teile aufteilt und diese parallel summiert.
Hauptidee:
- Wenn die Größe des Teilarrays klein ist, berechnet man die Summe direkt.
- Andernfalls teilt man das Teilarray in zwei Teile, erstellt zwei Unteraufgaben, führt sie parallel aus und kombiniert die Ergebnisse.
Beispiel in Java mit 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(); // startet die linke Aufgabe asynchron
int rightResult = rightTask.compute(); // berechnet die rechte Aufgabe im aktuellen Thread
int leftResult = leftTask.join(); // wartet auf das Ergebnis der linken Aufgabe
return leftResult + rightResult;
}
}
}
// Verwendung:
// ForkJoinPool pool = new ForkJoinPool();
// int[] data = ...;
// int totalSum = pool.invoke(new SumTask(data, 0, data.length));
Dieser Ansatz nutzt die Multithreading-Fähigkeiten effizient, um die Summe eines großen Arrays zu beschleunigen.