Java での並列処理
- 並列処理と順次処理の違い
-
parallelStream()
を使用した Java での並列処理 -
parallel()
を使用した Java での並列処理 -
CompletableFuture
を使用した Java での並列処理
並列処理は、最新のプログラミングにおける新しいトレンドです。 この処理により、複数のタスクを同時に実行できるため、処理時間が短縮されますが、タスクは独立している必要があります。
この記事では、トピックを簡単にするために必要な例と説明とともに、Java での並列処理について説明します。
並列処理と順次処理の違い
逐次処理では、タスクのすべての独立したプロセスが 1つずつ実行され、1つのプロセスが動作しているときに別のプロセスが待機する必要があります。
一方、並列処理では、一度に複数のプロセスを実行でき、1つのプロセスの終了を待つ必要はありません。 マルチタスクには並列処理が不可欠です。
parallelStream()
を使用した Java での並列処理
この例では、Java で並列処理を実行する方法を示します。 以下の例を見てみましょう。
// 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("");
}
}
私たちはすでに各行の目的を命じました。 このコードを実行すると、コンソールに次のような出力が表示されます。
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
parallel()
を使用した Java での並列処理
以下の例では、メソッド parallel()
を使用して並列処理を実行する方法を示しました。
次の内容のテキスト ファイルがあるとします。
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
以下のサンプル コードを確認してください。
// 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();
}
}
私たちはすでに各行の目的を命じました。 このコードを実行すると、コンソールに次のような出力が表示されます。
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
CompletableFuture
を使用した Java での並列処理
以下の例では、CompletableFuture
メソッドを使用して並列処理を実行する方法を示しました。 以下のサンプルコードを見てください。
// 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;
}
}
上記の例では、
supplyAsync()
- このメソッドはジョブを非同期的に完了します。 デフォルトでは、メソッドForkJoinPool.commonPool()
はサプライヤーからタスクを実行します。thenApply()
- このメソッドは関数を引数として受け取り、現在のステージが正常に完了した後に新しいCompletableStage
を返します。join()
- このメソッドは、完了後に結果を返します。
上記のコマンドを実行すると、コンソールに次のような出力が表示されます。
16
36
100
ここで共有されているコード例は Java であることに注意してください。システムに Java がない場合は、環境に Java をインストールする必要があります。
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