Heim  >  Artikel  >  Java  >  Wie verwende ich das Fork/Join-Framework für die parallele Programmierung in der gleichzeitigen Java-Programmierung?

Wie verwende ich das Fork/Join-Framework für die parallele Programmierung in der gleichzeitigen Java-Programmierung?

WBOY
WBOYOriginal
2024-05-08 15:57:02261Durchsuche

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 并发编程中如何使用 Fork/Join 框架进行并行编程?

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:

  1. Erstellen Sie eine Aufgabenklasse: Diese Klasse muss 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.RecursiveActionjava.util.concurrent.RecursiveTask 接口。RecursiveAction 用于执行不返回值的任务,而 RecursiveTask 则会返回值。
  2. 创建一个 Fork/Join 池:使用 java.util.concurrent.ForkJoinPool 创建一个线程池。它将管理 Fork/Join 任务的执行。
  3. Fork 任务:调用 fork() 方法将任务提交给 Fork/Join 池。池会将任务分解成更小的子任务,并分配给可用的线程。
  4. Join 任务:调用 join()
Erstellen Sie einen Fork-/Join-Pool:

Verwenden Sie java.util.concurrent.ForkJoinPool, um einen Thread-Pool zu erstellen. Es verwaltet die Ausführung von Fork/Join-Aufgaben.

Fork-Aufgabe:

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.

Aufgabe beitreten: 🎜Rufen Sie die Methode 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);
    }
}
🎜Durch Ausführen dieses Codes werden die ungeraden Zahlen zur Liste hinzugefügt und die von jedem Thread berechnete lokale Summe ausgegeben. 🎜

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn