• 카테고리

    질문 & 답변
  • 세부 분야

    모바일 앱 개발

  • 해결 여부

    미해결

Java Bill Pugh Solution 에서 INSTANCE

23.08.07 11:25 작성 조회수 270

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