Java/자바 정리

162. 병렬 스트림 (Parallel Stream) – 멀티스레드로 스트림 처리하기

코딩하는냥이 2025. 5. 23. 10:41
반응형

자바의 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()을 활용해 멀티스레드 기반의 병렬 처리 흐름을 확인했습니다.
간단한 출력이더라도 실행할 때마다 다른 스레드가 작동한다는 것을 통해,
병렬 스트림의 작동 원리를 시각적으로 이해하실 수 있었을 것입니다.
다만 처리 순서가 중요하거나 부작용이 발생할 수 있는 작업에는 신중하게 사용하는 것이 좋습니다.