반응형
자바의 Stream API는 기본적으로 순차 처리를 수행하지만,
parallelStream()을 사용하면 멀티스레드를 활용한 병렬 처리가 가능합니다.
이번 예제에서는 List<String> 데이터를 병렬 스트림으로 처리하여
스레드별로 작업이 분산되는 방식을 확인해보겠습니다.
📌 예제 코드
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Stream;
public class ParallelStreamExample {
public static void main(String[] args) {
List<String> list = new ArrayList<String>();
list.add("홍길동");
list.add("신용인");
list.add("김자바");
list.add("비신용");
list.add("람다식");
Stream<String> parallelStream = list.parallelStream();
parallelStream.forEach(name ->
System.out.println(name + " : " + Thread.currentThread().getName()));
}
}
💻 실행 결과 (예시)
김자바 : ForkJoinPool.commonPool-worker-3
홍길동 : ForkJoinPool.commonPool-worker-5
비신용 : ForkJoinPool.commonPool-worker-7
람다식 : main
신용인 : ForkJoinPool.commonPool-worker-1
※ 실행할 때마다 출력 순서와 스레드 이름은 달라질 수 있습니다.
💬 코드 설명
- list.parallelStream()은 기존 리스트를 병렬 처리 가능한 스트림으로 변환합니다.
- forEach() 내부에서 각 요소가 어떤 스레드에서 처리되고 있는지를 확인하기 위해
Thread.currentThread().getName()을 함께 출력합니다. - 출력된 결과를 보면 요소마다 다른 스레드에서 병렬로 처리되고 있는 것을 확인할 수 있습니다.
- 내부적으로 자바는 ForkJoinPool.commonPool이라는 스레드 풀을 사용해 병렬 작업을 수행합니다.
💡 포인트 정리
- parallelStream()을 사용하면 멀티코어 CPU를 활용한 병렬 처리가 가능합니다.
- 연산량이 많은 작업을 처리할 때 속도 향상에 도움이 될 수 있습니다.
- 병렬 스트림은 요소 처리 순서를 보장하지 않으므로, 순서가 중요한 작업에서는 주의해야 합니다.
- 쓰레드에 의존적인 작업(예: UI 변경, 공유 자원 수정 등)은 병렬 스트림과 함께 사용하지 않는 것이 안전합니다.
📌정리하자면, 이번 예제에서는 parallelStream()을 활용해 멀티스레드 기반의 병렬 처리 흐름을 확인했습니다.
간단한 출력이더라도 실행할 때마다 다른 스레드가 작동한다는 것을 통해,
병렬 스트림의 작동 원리를 시각적으로 이해하실 수 있었을 것입니다.
다만 처리 순서가 중요하거나 부작용이 발생할 수 있는 작업에는 신중하게 사용하는 것이 좋습니다.
'Java > 자바 정리' 카테고리의 다른 글
165. 배열로부터 스트림 생성하기 – Arrays.stream() 활용 (0) | 2025.05.23 |
---|---|
164. 스트림 요소 출력하기 – 객체 리스트 출력 실습 (0) | 2025.05.23 |
163. 스트림 파이프라인 – 중간 연산과 최종 연산으로 평균 계산하기 (1) | 2025.05.23 |
161. Stream API 시작하기 – 컬렉션 요소 반복 처리 (0) | 2025.05.23 |
160. 생성자 참조(Constructor Reference) – new 키워드도 메서드 참조처럼 사용하기 (0) | 2025.05.22 |
159. 메서드 참조 – 문자열 비교에 활용하기 (0) | 2025.05.22 |