volatile 사용 이유에 대해서 여쭤보고 싶습니다!
612
5 asked
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요!
- 먼저 유사한 질문이 있었는지 검색해보세요.
- 서로 예의를 지키며 존중하는 문화를 만들어가요.
- 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.
synchronized 메서드 블록에서 사용되는 모든 공유변수는 동시성처리를 위해서 공유 변수에 volatile 키워드가 없어도 가시성이 확보되는 것으로 배웠는데 혹시 제가 잘못 알고있는건지 궁금해서 질문드립니다!
Answer 3
0
이중 검사에서 synchroized 키워드로 원자성을 확보하고 이후에 접근하는 스레드들이 성능 이슈가 없게 하려고 맨 앞에 if(instance == null) 코드를 사용하는 건데 instance 변수에 대한 가시성이 확보되지 않아 이미 초기화되었는데도 synchroized 블록에 진입하여 성능 이슈가 생길까봐 volatile 키워드를 붙여 가시성을 확보한다. 저는 이렇게 이해했습니다
0
AI가 답을 잘 했네요. 원자성이 보장되지 않아도 큰 문제가 발생하지 않을 만한 변수에 선언하는 용도인데요. 저도 실제 업무중에 본적은 거의 없습니다. 여러 쓰레드가 동시에 접근하는 변수의 값에 민감한 편이라 원자성을 확보하려고 synchroninzed 사용한 경우를 더 많이 봤네요.
0
안녕하세요, 인프런 AI 인턴입니다.
열심히 공부하겠습니다님의 질문에 답변드립니다.
Java에서 volatile 키워드는 말씀하신 대로 변수의 가시성을 보장합니다. 하지만 synchronized 메서드 또는 블록 내에서 사용되는 모든 변수에 대해서는 이미 가시성이 보장됩니다. 그 이유는 synchronized 블록에 진입할 때 메모리에서 읽어온 값을 사용하고, 블록을 벗어날 때 그 변경사항을 메모리에 다시 쓰기 때문입니다.
따라서, synchronized 메서드 또는 블록 안에서 사용되는 변수에 volatile을 추가로 사용하는 것은 필수적이지 않습니다. 하지만 volatile 키워드는 synchronized와 달리 락을 사용하지 않으므로, 단순한 변수의 가시성 보장이 필요하고, 변수 접근에 대한 동기화가 큰 오버헤드를 발생시키는 상황에서 유용합니다. 예를 들어, 변수의 상태 플래그와 같은 단순한 경우에 사용될 수 있습니다.
정리하면, synchronized는 변수의 가시성 뿐 아니라 원자성까지 보장하지만, volatile은 변수의 가시성만 보장합니다. 따라서 상황에 따라 적절한 키워드를 사용하는 것이 중요합니다.
열심히 공부하고 계시는 열심히 공부하겠습니다님의 학습이 더욱 풍부해지길 바랍니다.
많이 사용되는 패턴의 순서를 정한다면 어떤 순서일까요?
0
109
1
@Builder에 대해 사소한 질문
0
52
1
default 기능이 있는 interface와 추상클래스의 차이
0
49
1
실무 코드에 디자인 패턴 적용 시의 '기준'에 대해 조언을 얻고 싶습니다.
0
42
1
데코레이터 패턴, before 가 O(2^n) 인 이유
0
42
0
혹시 다음강의는 언제쯤..
0
346
1
Spring Security 의 ProviderManager (AuthenticationManager) 도 옵저버 패턴을 사용하고 있다고 볼 수 있을까요?
0
390
2
싱글톤 패턴을 깨트리는 방법
0
551
1
코드에 약간 오타가 있는거 같습니다.
0
430
1
싱글톤 (Singleton) 패턴 구현 방법 3 - 2번 퀴즈에 대해 질문이 있습니다.
0
568
2
안녕하세요, 강의 순서 질문드립니다.
0
685
1
스프링 시큐리티 WebSecurityConfigurerAdapter deprecated 대체 코드
0
2429
1
팩토리메소드 = 추상팩토리?
2
922
1
중재자 패턴에 관하여~
0
509
1
undo 메소드 작업중에서
1
365
1
익명클래스로 객체 생성시 의문점
0
583
1
mediator패턴에서 객체끼리 순환참조는 어떻게 해결해야할까요
0
479
1
객체간에 this를 넘기는 부분에 관련해 질문이 있습니다..
1
366
1
전략 패턴과 상태 패턴에 관련해서 질문이 있습니다.
0
281
1
플라이웨이트 패턴 3부에서 HashMap 동시성 질문입니다.
0
254
1
enum 이 이른 초기화 방법이 아니라는 것은,
0
501
1
해당 코드가 C# 에선 접근 관련 컴파일 에러가 뜹니다.
0
430
1
설계관련 궁금증이 있습니다.
0
324
0
설계관련 궁금증이 있습니다.
0
232
0

