자바 단일 모드 장단 점 (게으름뱅이 모드, 굶 주 린 사람 모드, 이중 검사 잠 금 모드, Holder 모드)

2381 단어 디자인 모드
네 가지 단일 모델 은 실제 적 으로 모두 운용 되 고 있다.
 
게으름뱅이 식 단일 모드:
장점: 로드 지연
단점: 동기 화 되 지 않 은 게으름뱅이 식 은 스 레 드 가 안전 하지 않 습 니 다. synchronized 를 추가 하면 스 레 드 가 안전 합 니 다.
public class Singleton {
	private static Singleton singleton = null;
	private Singleton(){
	}
	public static synchronized Singleton getInstance(){
		if(singleton == null){
			singleton = new Singleton();
		}
		return singleton;
	}
}

 
굶 주 린 한식 단일 모드:
장점: 스 레 드 안전
단점: 메모리 공간 낭비
인 스 턴 스 응용 프로그램: java. lang. Runtime
public class Singleton {

    private static final Singleton singleton = new Singleton();

    private Singleton(){

    }

    public static Singleton getInstance(){

       return singleton ;

    }

}

 
이중 검사 잠 금 모드 (게으름뱅이 모드 최적화 판):
특징: 성능 및 라인 안전 보장
주의: 사실 이중 검사 모델 은 게으름뱅이 모델 에 대한 최적화 입 니 다. new Singleton 전에 자 물 쇠 를 추가 합 니 다.구성원 변수 singleton 은 volatile 수식 을 사용 하 는 것 이 좋 습 니 다. 그렇지 않 으 면 무 참 구조 에서 다른 구성원 변 수 를 초기 화하 면 명령 을 다시 정렬 하여 새로 만 든 대상 이 최신 구성원 변 수 를 가 져 오지 못 할 수 있 습 니 다.
public class Singleton{

    private static volatile Singleton singleton;   

    private Singleton(){

    }

    public static Singleton getInstance(){

       if(singleton == null){

           synchronized(Singleton.class){

              if(singleton == null){

                  singleton = new Singleton();

              }
           }
       }

    return singleton;
    }
}

 
 
Holder 단일 예 모드 (작업 중 자주 사용):
특징: 게 으 른 로드 를 실현 할 뿐만 아니 라 성능 이 좋 고 스 레 드 가 안전 합 니 다.
클래스 를 설명 할 때 구성원 변 수 는 인 스 턴 스 변 수 를 설명 하지 않 고 정적 내부 클래스 에 넣 습 니 다.이런 방식 은 게으름뱅이 식 과 약간 비슷 하 다. 그들 은 모두 클래스 로 딩 체 제 를 사용 하여 인 스 턴 스 를 초기 화 할 때 하나의 스 레 드 만 있 도록 한다. 다른 것 은 Holder 단일 모델 은 인 스 턴 스 의 초기 화 를 정적 클래스 에 넣 어 실현 하여 게 으 른 로 딩 을 실현 하 는 것 이다.
개인 정적 HoldersSingleton 인 스 턴 스 = new HoldersSingleton ();한 번 만 불 러 옵 니 다.
public class HolderSingleton {

    //           
    private HolderSingleton() {
    }

    //        ,                
    public static HolderSingleton getInstance() {
        return Holder.instance;
    }

    //                  ,     ,       
    private static class Holder {
        private static HolderSingleton instance = new HolderSingleton();
    }
}

 
 
 
 
 
 
 
 
 
 
 
 

좋은 웹페이지 즐겨찾기