Parallelverarbeitung in Java

MD Aminul Islam 12 Oktober 2023
  1. Unterschied zwischen paralleler und sequenzieller Verarbeitung
  2. Parallelverarbeitung in Java mit parallelStream()
  3. Parallelverarbeitung in Java mit parallel()
  4. Parallelverarbeitung in Java mit CompletableFuture
Parallelverarbeitung in Java

Parallelverarbeitung ist ein neuer Trend in der modernen Programmierung. Diese Verarbeitung ermöglicht es uns, mehrere Aufgaben gleichzeitig auszuführen, wodurch die Verarbeitungszeit verkürzt wird, aber die Aufgaben sollten unabhängig voneinander sein.

In diesem Artikel sehen wir uns die parallele Verarbeitung in Java an, zusammen mit notwendigen Beispielen und Erklärungen, um das Thema zu vereinfachen.

Unterschied zwischen paralleler und sequenzieller Verarbeitung

Bei der sequentiellen Verarbeitung werden alle unabhängigen Prozesse einer Aufgabe nacheinander ausgeführt, und wenn ein Prozess arbeitet, muss ein anderer Prozess warten.

Andererseits können bei der Parallelverarbeitung mehrere Prozesse gleichzeitig laufen und müssen nicht auf das Ende eines Prozesses warten. Parallelverarbeitung ist für Multitasking unerlässlich.

Parallelverarbeitung in Java mit parallelStream()

Dieses Beispiel zeigt, wie wir eine Parallelverarbeitung in Java durchführen können. Schauen wir uns unser Beispiel unten an:

// importing necessary packages
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class JavaParallal {
  public static void main(String[] args) {
    // Creating an integer array
    Integer[] IntArray = {1, 2, 3, 4, 5, 6, 7, 8};
    // Creating a list from the integer array
    List<Integer> NumList = new ArrayList<>(Arrays.asList(IntArray));

    System.out.println("The list elements using Serial Stream:");
    NumList.stream().forEach(num -> System.out.print(num + " ")); // Sequencial processing here
    System.out.println("");

    System.out.println("The list elements using Parallel Stream:");
    NumList.parallelStream().forEach(
        num -> System.out.print(num + " ")); // Parallal processing here
    System.out.println("");
  }
}

Wir haben bereits die Zwecke jeder Zeile befohlen. Wenn Sie diesen Code ausführen, sollten Sie eine Ausgabe wie die folgende in Ihrer Konsole erhalten:

The list elements using Serial Stream:
1 2 3 4 5 6 7 8
The list elements using Parallel Stream:
6 5 8 3 7 4 2 1

Parallelverarbeitung in Java mit parallel()

In unserem Beispiel unten haben wir gezeigt, wie wir mit der Methode parallel() eine Parallelverarbeitung durchführen können.

Angenommen, wir haben eine Textdatei mit dem folgenden Inhalt:

This is line 1
This is line 2
This is line 3
This is line 4
This is line 5
This is line 6
This is line 7
This is line 8

Beachten Sie den folgenden Beispielcode:

// importing necessary packages
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.util.stream.Stream;

public class JavaParallal {
  public static void main(String[] args) throws IOException {
    // Locating the file
    File MyFile = new File("G:\\Java Projects\\SimpleJavaCodes\\src\\SampleTexts.txt");

    Stream<String> FileContent = Files.lines(MyFile.toPath()); // Reading the file

    FileContent.parallel().forEach(System.out::println); // Parallal

    FileContent.close();
  }
}

Wir haben bereits die Zwecke jeder Zeile befohlen. Wenn Sie diesen Code ausführen, erhalten Sie eine Ausgabe wie die folgende in Ihrer Konsole:

This is line 6
This is line 5
This is line 2
This is line 1
This is line 4
This is line 7
This is line 8
This is line 3

Parallelverarbeitung in Java mit CompletableFuture

In unserem Beispiel unten haben wir gezeigt, wie wir mit der Methode CompletableFuture eine Parallelverarbeitung durchführen können. Sehen Sie sich den folgenden Beispielcode an:

// importing necessary packages

import java.util.Arrays;
import java.util.List;
import java.util.concurrent.CompletableFuture;

public class JavaCompleteTableFuture {
  public static void main(String[] args) {
    try {
      List<Integer> MyList = Arrays.asList(2, 3, 5); // Declaring a list element
      MyList.stream()
          .map(Number -> CompletableFuture.supplyAsync(() -> GetNumber(Number)))
          .map(CompletableFuture -> CompletableFuture.thenApply(N -> N * N))
          .map(T -> T.join())
          .forEach(S -> System.out.println(S + " "));

    } catch (Exception e) {
      e.printStackTrace();
    }
  }
  private static int GetNumber(int a) {
    return a + a;
  }
}

In unserem obigen Beispiel

  1. supplyAsync() - Diese Methode schließt einen Job asynchron ab. Standardmäßig führt die Methode ForkJoinPool.commonPool() die Aufgabe des Lieferanten aus.
  2. thenApply() – Diese Methode akzeptiert eine Funktion als Argument und gibt eine neue CompletableStage zurück, nachdem die aktuelle Phase normal abgeschlossen wurde.
  3. join() - Diese Methode gibt das Ergebnis zurück, nachdem sie vollständig ausgeführt wurde.

Wenn Sie den obigen Befehl ausführen, erhalten Sie eine Ausgabe wie die folgende in Ihrer Konsole:

16
36
100

Bitte beachten Sie, dass die hier freigegebenen Beispielcodes in Java sind und Sie Java in Ihrer Umgebung installieren müssen, wenn Ihr System es nicht hat.

MD Aminul Islam avatar MD Aminul Islam avatar

Aminul Is an Expert Technical Writer and Full-Stack Developer. He has hands-on working experience on numerous Developer Platforms and SAAS startups. He is highly skilled in numerous Programming languages and Frameworks. He can write professional technical articles like Reviews, Programming, Documentation, SOP, User manual, Whitepaper, etc.

LinkedIn

Verwandter Artikel - Java Multithreading