Java - Stream의 병렬처리(Parallel)

Stream에서 수행되는 작업은 기본적으로 single thread에서 처리되지만, Multi thread에서 처리할 수도 있습니다.

1. Stream을 Single 쓰레드에서 처리

다음은 Single thread에서 Stream의 작업을 수행시키는 예제입니다. Single thread에서 순차적으로 처리되기 때문에, forEach()에서 출력되는 순서는 리스트에 저장된 순서와 동일합니다.

List<String> list =
        Arrays.asList("a", "b", "c", "d", "e", "f", "g", "h", "i");
Stream<String> stream = list.stream();

stream.forEach(System.out::println);

Output:

a
b
c
d
e
f
g
h
i

2. Stream을 멀티 쓰레드에서 병렬로 처리

Stream.parallel()은 Stream에서 수행되는 작업을 병렬로 처리하도록 합니다. 멀티 쓰레드에서 병렬로 처리되기 때문에 속도는 빠르지만, forEach()에서 출력되는 순서는 리스트에 저장된 순서와 다릅니다. 또한, 실행할 때마다 처리되는 쓰레드의 타이밍이 다르기 때문에 결과가 달라질 수 있습니다. 그렇기 때문에 처리 순서가 달라져도 결과에 영향을 주지 않을 때만 병렬로 처리해야 합니다.

List<String> list =
        Arrays.asList("a", "b", "c", "d", "e", "f", "g", "h", "i");
Stream<String> stream = list.stream();

stream.parallel().forEach(System.out::println);

Output:

f
e
h
i
g
c
b
d
a

3. Collection.parallelStream()으로 병렬 처리

Collection.parallelStream()은 병렬로 동작하는 Stream 객체를 리턴합니다.

아래와 같이 리스트에서 Stream을 만들 때 사용할 수 있습니다.

List<String> list =
        Arrays.asList("a", "b", "c", "d", "e", "f", "g", "h", "i");
Stream<String> stream = list.parallelStream();

stream.forEach(System.out::println);

Output:

f
e
c
d
b
a
h
i
g
Loading script...

Related Posts

codechachaCopyright ©2019 codechacha