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

Versa님의 프로필 이미지
Versa

작성한 질문수

냉동코더의 알기 쉬운 Modern Android Development 입문

Singleton Pattern 기초

Java Bill Pugh Solution 에서 INSTANCE

작성

·

359

0

Singleton Pattern 기초 강의 내용에서 질문드립니다.

Bill Pugh Solution (Java)

부분에서 Holder 클래스를 보시면

private static final DBHandler INSTANCE = new DBHandler();

라고 되어있는데, 이 경우 getInstance() 함수를 통해 Holder.INSTANCE 가 호출이 되어도 fianl 로 선언되어있어 한번만 선언되기 때문에 signleton 으로 사용 가능하다는 말씀이 맞는지 궁금합니다.

답변 1

0

냉동코더님의 프로필 이미지
냉동코더
지식공유자

빌푸 솔루션이 스레드 세이프가 되는 이유는, 두 개의 스레드가 거의 동시에 getInstance()를 실행시키는 상황에서 1번 스레드가 먼저 getInstance()를 실행시켰을 경우 JVM이 2번 스레드의 요청을 받아도 1번 스레드에 의해 static inner class가 생성될 때까지 대기시키므로 싱글톤이 유지되기 때문입니다. 다음 토론도 참고하시면 좋을 것 같습니다.

https://stackoverflow.com/questions/6109896/singleton-pattern-bill-pughs-solution

Versa님의 프로필 이미지
Versa

작성한 질문수

질문하기