Wie verwende ich das Java Fork/Join-Framework für die parallele Programmierung? Erstellen Sie eine Aufgabenklasse und implementieren Sie die Schnittstelle RecursiveAction oder RecursiveTask. Erstellen Sie einen Fork/Join-Pool und verwalten Sie die Aufgabenausführung. Rufen Sie die Methode fork() auf, um die Aufgabe an den Pool zu senden und sie in Unteraufgaben zu zerlegen. Rufen Sie die Methode „join()“ auf, um auf den Abschluss der Aufgabe zu warten und die Ergebnisse abzurufen (für RecursiveTask).
Java Concurrent Programming: Parallele Programmierung mit Fork/Join Framework
Fork/Join Framework ist eine Java-Bibliothek, die ein leichtes Framework für die effiziente Ausführung paralleler Aufgaben bietet. Es basiert auf einem arbeitsraubenden Algorithmus, der es Threads ermöglicht, an Aufgaben zusammenzuarbeiten und so die Auslastung der CPU-Ressourcen zu maximieren.
So verwenden Sie das Fork/Join-Framework:
java.util.concurrent.RecursiveAction
oder java.util implementieren. concurrent.RecursiveTask
Schnittstelle. RecursiveAction wird verwendet, um Aufgaben auszuführen, die keinen Wert zurückgeben, während RecursiveTask dies tut. java.util.concurrent.RecursiveAction
或 java.util.concurrent.RecursiveTask
接口。RecursiveAction 用于执行不返回值的任务,而 RecursiveTask 则会返回值。java.util.concurrent.ForkJoinPool
创建一个线程池。它将管理 Fork/Join 任务的执行。fork()
方法将任务提交给 Fork/Join 池。池会将任务分解成更小的子任务,并分配给可用的线程。join()
Verwenden Sie java.util.concurrent.ForkJoinPool
, um einen Thread-Pool zu erstellen. Es verwaltet die Ausführung von Fork/Join-Aufgaben.
Rufen Sie die Methode fork()
auf, um die Aufgabe an den Fork/Join-Pool zu senden. Der Pool unterteilt Aufgaben in kleinere Unteraufgaben und weist sie verfügbaren Threads zu.
join()
auf und warten Sie, bis die Aufgabe abgeschlossen ist. Bei RecursiveTask wird außerdem der Rückgabewert an den Hauptthread zurückgegeben. 🎜🎜🎜🎜Praktisches Beispiel: 🎜🎜🎜Angenommen, wir haben eine parallele Aufgabe, die die Summe aller ungeraden Zahlen in einer Zahlenliste berechnet. Wir können dies mithilfe des Fork/Join-Frameworks wie folgt implementieren: 🎜import java.util.concurrent.ForkJoinPool; import java.util.concurrent.RecursiveAction; public class OddSumTask extends RecursiveAction { private int[] numbers; private int start; private int end; public OddSumTask(int[] numbers, int start, int end) { this.numbers = numbers; this.start = start; this.end = end; } @Override protected void compute() { int sum = 0; for (int i = start; i < end; i++) { if (numbers[i] % 2 != 0) { sum += numbers[i]; } } System.out.println("Partial sum: " + sum); } } public class Main { public static void main(String[] args) { // 创建一个数字列表 int[] numbers = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; // 创建一个 Fork/Join 池 ForkJoinPool pool = new ForkJoinPool(); // 创建一个 OddSumTask OddSumTask task = new OddSumTask(numbers, 0, numbers.length); // Fork 任务 pool.invoke(task); } }
Das obige ist der detaillierte Inhalt vonWie verwende ich das Fork/Join-Framework für die parallele Programmierung in der gleichzeitigen Java-Programmierung?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!