2013-09-28 2 views

답변

4

Lazy initialization 당신이 init를하지 않는 것을 의미한다 초기화 객체가 처음 사용될 때까지 객체를 초기화합니다.

Early initialization은 역순으로, 클래스로드시에 싱글 톤을 미리 초기화합니다.

초기 초기화를 수행하는 방법이 있습니다. 하나는 싱글 톤을 static으로 선언하는 것입니다.

예로서 다음 사항을 라이프 사이클 당으로

public class SingletonClassEarly { 
    private static SingletonClassEarly sce = new SingletonClassEarly(); 
    private SingletonClassEarly() {} // make it private 

    public static SingletonClassEarly getInstance() { 
     return sce; 
    } 
} 

를 JVM 후로드 된이 싱글은 시작되고 클래스가 초기화 될 때. Shutdown/Exit 할 때 JVM에 의해 언로드됩니다.

+0

안녕 Anubhava을, 다른 방법은 무엇인가 초기 초기화를 위해서 – upog

+1

@upog : 'Enum'을 사용하는 것은 스프링과 같은 프레임 워크를 사용하여 싱글 톤을 주입하는 또 다른 방법이다. – anubhava

0

A는 일반적으로 싱글이, 당신은이 시나리오에서는

private static YouClass singleTon ; 

-- 

-- 

    public static YouClass getInstance(){ 
      if(singleTon == null){ 
       singleTon = new YouClass(); 
      } 
      return singleTon ; 
     } 

을 볼 것입니다.

초기 초기화는, 즉에게 자기를 선언하면서 인스턴스를 만들기 클래스

private static YouClass singleTon = new YouClass(); 

에서

을 의미한다. Singleton pattern wiki에서

, 유형을 읽어

  • 게으른 초기화

  • 열망 초기화

  • 정적 블록

1

게으른 Initalizaion

class SingletonClass { 

    private static SingletonClass object; 
    private SingletonClass() {} 
    public static SingletonClass getInstance(){ 
     if(object == null){ 
      object= new SingletonClass(); //Lazy Initalizaion 
     } 
     return object; 
    } 
} 

초기 초기화 설명에 대한

class SingletonClass { 

    private static SingletonClass object = new SingletonClass(); //Early initialization 
    private SingletonClass() {} 

    public static SingletonClass getInstance(){ 
     return object; 
    } 
} 
0

감사합니다 여러분. 그건 내 질문에 대답하는 데 도움이.

다른 접근법이 어떻게 작동하는지에 대해 더 자세히 설명하는 유용한 블로그 글 2 개를 발견했습니다.여기

는 링크입니다 :

http://howtodoinjava.com/2012/10/22/singleton-design-pattern-in-java/

다음 기사는 이중 확인 방식 사용시 휘발성 키워드의 사용을 설명하는 데 도움이 :

http://javarevisited.blogspot.com/2011/06/volatile-keyword-java-example-tutorial.html

관련 문제