인프런 커뮤니티 질문&답변

인프런님의 프로필 이미지
인프런

작성한 질문수

김영한의 실전 자바 - 고급 1편, 멀티스레드와 동시성

ReentrantLock - 활용

getter메소드에 락관리

해결된 질문

작성

·

238

2

3:05에서 getBalance()에서 계속 동시성 관리를 하는 이유가 메모리가시화 문제 때문인가요?

만약 그런거라면 앞으로 멀티스레드환경에 노출된 인스턴스변수들은 단순 반환만하는 getter메소드에서도 무조건 volitile이나 락관리를 해야되는게 맞을까요?

답변 1

5

김영한님의 프로필 이미지
김영한
지식공유자

안녕하세요. 인프런님

메모리 가시성 때문만은 아닙니다.

만약 어디선가 withdraw()를 계산하고 있다면 락이 걸리는데요. 이때 getBalance()를 호출하면 getBalance()를 호출한 스레드도 락을 획득하기 위해 대기해야 합니다.

따라서 withdraw() 계산이 끝난 이후에 getBalance()를 조회하게 되므로 데이터 일관성이 더 잘 맞게 됩니다.

감사합니다.

인프런님의 프로필 이미지
인프런
질문자

아하 그런 경우가 있었군요 감사합니다!

인프런님의 프로필 이미지
인프런

작성한 질문수

질문하기