멀티스레드
1
37 asked
람다와 스트림이 순수 함수를 강제하지 않는데
멀티스레드 환경에 안전하다는 게 어떻게 안전한건지 궁금합니다.
Answer 1
0
안녕하세요, 인프런 AI 인턴입니다. Cola님!
람다와 스트림이 멀티스레드 환경에서 안전한 이유를 이해하기 위해선 몇 가지 개념을 살펴볼 필요가 있습니다. 이들은 Concurrent Stream을 통한 멀티스레드 처리를 사용할 경우에 주로 해당됩니다.
Immutable State: 스트림과 람다를 사용할 때, 일반적으로 함수형 프로그래밍 스타일이 도입되므로 변경 불가능한 상태(immutable state)를 유지하게 됩니다. 이렇게 되면 여러 스레드가 동시에 데이터를 읽어도 문제가 발생하지 않습니다.
Stateless Functions: 스트림에서 사용되는 람다 표현식은 일반적으로 무상태(stateless)로 작성됩니다. 즉, 그 함수들이 외부의 변수를 변경하지 않으므로, 스레드 간의 경쟁 조건(race condition)을 피할 수 있습니다.
Parallel Stream: Java 8부터 제공되는 parallelStream() 메소드는 내부적으로 ForkJoinPool을 사용하여 병렬 처리 환경을 구성하므로 멀티스레드 안전성을 보장합니다. 이것은 스트림 연산이 분리된 스레드 내에서 작동하면서도 공유된 상태를 변경하지 않기 때문에 가능합니다.
위의 개념들이 결합되어 스트림과 람다가 멀티스레드 환경에서 안전성을 어느 정도 보장할 수 있게 하는 것입니다. 다만, 이들이 순수 함수(pure function)를 강제하는 것은 아니기 때문에, 작성하는 코드는 항상 스레드 안전하지 않을 수 있습니다. 개인의 주의가 필요합니다.
관련된 유사 질문에 대한 답변들을 참고하시려면 다음 링크들을 확인해 보세요:
- Java 스트림과 병렬 처리의 안전성
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
N+1 관련해서 질문있습니다.
0
8
1
성능 오버헤드
0
11
1
다음 강의는 언제 올려주시는지요?
0
11
0
하단 파일이 열리지 않습니다
0
10
0
ssh-keygen -t rsa -P "" 등 ssh 암호화? 는 하둡에서 필수인가요?
0
12
1
강의 중복 확인 요청
0
15
1
volatile에 대해 질문 있습니다.
1
25
2
Mark and Sweep
1
23
1
20년 4,5회 13번
0
18
1
GC 알고리즘
1
24
2
용어 질문
1
19
1
호출횟수 질문입니다.
1
28
2
실행과정 질문입니다.
2
30
1
코딩 테스트 All-in-One(Java)' 강의 노션 교재 권한문의
0
20
1
벌크연산에서 member.getAge 호출 시 영속성 컨텍스트에서 데이터를 가져오는건가요?
0
24
2
중복내용 제보?!
1
28
2
태어난김에 세계일주 시간 초과
0
22
1
커리큘럼 중 정렬 관련 질문
0
20
1
코테 사이트 로그인 불가
0
27
1
여러 파드 환경에서 단일 실행 보장 방식
0
26
2
XAMPP에서 Apache, DB 재기동 시 접속안되는 문제
0
19
1
UserDataManager 클래스 hasSaveError 처리
0
25
2
제공해주신 자료에 스크립트들이 빠져있습니다
0
25
2
실습 권한이 없네요··· 이건 ··· 좀··· 401 에러떠요
0
29
3

