Parallelverarbeitung in Java
- Unterschied zwischen paralleler und sequenzieller Verarbeitung
-
Parallelverarbeitung in Java mit
parallelStream()
-
Parallelverarbeitung in Java mit
parallel()
-
Parallelverarbeitung in Java mit
CompletableFuture
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
supplyAsync()
- Diese Methode schließt einen Job asynchron ab. Standardmäßig führt die MethodeForkJoinPool.commonPool()
die Aufgabe des Lieferanten aus.thenApply()
– Diese Methode akzeptiert eine Funktion als Argument und gibt eine neueCompletableStage
zurück, nachdem die aktuelle Phase normal abgeschlossen wurde.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.
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