HOWTO · Java
Java의 병렬 처리
이 자습서에서는 Java에서 병렬 처리 구현에 대해 설명합니다.
이 페이지의 내용
병렬 처리는 최신 프로그래밍의 새로운 추세입니다. 이 처리를 통해 여러 작업을 동시에 실행하여 처리 시간을 줄일 수 있지만 작업은 독립적이어야 합니다.
이 기사에서는 주제를 더 쉽게 만들기 위해 필요한 예제 및 설명과 함께 Java의 병렬 처리를 볼 것입니다.
병렬 처리와 순차 처리의 차이점
순차 처리에서는 작업의 모든 독립적인 프로세스가 하나씩 실행되며 한 프로세스가 작동하면 다른 프로세스가 대기해야 합니다.
반면 병렬 처리에서는 여러 프로세스가 동시에 실행될 수 있으며 한 프로세스가 끝날 때까지 기다릴 필요가 없습니다. 병렬 처리는 멀티태스킹에 필수적입니다.
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를 설치해야 합니다.