자바 디자인 모드 의 단일 예 모드 (Singleton)

5315 단어
선언:
     okHttp 를 정리 할 때 네트워크 요 구 를 관리 하기 위해 단일 모델 을 사 용 했 습 니 다. 저녁 에 상태 가 별로 없습니다. 마음 을 가 라 앉 히 고 사용 빈도 가 가장 높 은 디자인 모델 의 단일 모델 을 정리 하 는 것 을 배 웠 습 니 다.
 단일 모드:
       단일 모드 는 하나의 인 스 턴 스 만 있 고 자체 적 으로 예화 되 어 전체 시스템 에 이 인 스 턴 스 를 제공 하도록 확보 합 니 다.
단일 특징:
4. 567917. 단일 사례 류 는 하나의 사례 만 있 을 수 있다
4. 567917. 단일 클래스 는 자신 이 자신의 유일한 인 스 턴 스 를 만들어 야 합 니 다
4. 567917. 단일 클래스 는 모든 다른 대상 에 게 이 인 스 턴 스 를 제공 해 야 합 니 다
단일 분류:
     1) 게으름뱅이
    (1) 비 스 레 드 안전 실현
public class Singleton {     
 
    private Singleton(){     
    }     

    private static Singleton instance;     
    public static Singleton getInstance(){     
        if(instance == null){     
            instance = new Singleton();     
        }
      return instance;     
    }     
} 

  (2) 스 레 드 안전 실현 방식 1 방법 과 동기 화 이런 실현 방식 은 효율 이 높 지 않다.
public class Singleton {        

    private Singleton(){     
    }     

    private static Singleton instance;     
    public static synchronized Singleton getInstance(){     
        if(instance == null){     
            instance = new Singleton();     
        } 
      return instance;        
    }     
}

 (3.) 라인 안전 실현 방식 이중 검사 잠 금
public class Singleton{  
  private static Singleton single;    //              
  private Singleton(){}    //         

  public static Singleton getSingle(){    //                 
    if(single == null){     
        synchronized (Singleton.class) {   //                              
            if(single == null){      
                single = new Singleton();          
            }     
        }  
    }    
    return single;   //           
  }  
}  

2.) 굶 주 린 한식 일례 류
      굶 주 린 사람 은 클래스 를 만 드 는 동시에 정적 인 대상 을 만들어 시스템 에 사용 하도록 했 습 니 다. 이후 에는 변 하지 않 기 때문에 천성적으로 스 레 드 가 안전 합 니 다.
public class Singleton  {  

    private Singleton(){  
    }  

    private final static Singleton instance = new Singleton();  

    private static Singleton getInstance(){  
        return instance;  
    }  
} 

 
3. 내부 유형
내부 클래스 에 서 는 로드 지연 을 실현 합 니 다. getInstance () 를 호출 해야만 유일한 인 스 턴 스 를 메모리 에 만 들 수 있 습 니 다. 또한 게으름뱅이 식 다 중 스 레 드 문 제 를 해결 할 수 있 습 니 다. 해결 방식 은 Classloader 의 특성 을 이용 하여 스 레 드 안전 을 실현 할 뿐만 아니 라 동기 화 에 따 른 성능 영향 도 피 할 수 있 습 니 다.
public class Singleton{        
     private Singleton(){     
      }     

    private class SingletonHoledr(){     
        private static Singleton instance = new Singleton();     
    }     

    private static Singleton getInstance(){     
        return SingletonHoledr.instance;     
    }     
} 

4.) 매 거 진 사례
'Effective Java' 저자 가 추천 하 는 방법, 장점: 다 중 스 레 드 동기 화 문 제 를 피 할 수 있 을 뿐만 아니 라 반 직렬 화 를 방지 하여 새로운 대상 을 다시 만 드 는 것 도 방지 할 수 있다.
public enum Singleton {
    /**
     *          ,     Singleton     。
     */
    
    uniqueInstance;
    
    /**
     *           
     */
    public void doSomeThing(){
        //    
    }
}

5. 게으름뱅이 와 배 고 픈 남자 의 구별
(1) 각도 초기 화
     굶 주 린 사람 은 불 러 오 면 하나의 예 를 초기 화 하 는 것 입 니 다. getInstance 를 보장 할 때 하나의 예 는 이미 존재 합 니 다. 게 으 른 사람 은 게 을 러 서 getInstance 를 호출 할 때 만 이 예 를 초기 화 합 니 다.
(2) 스 레 드 안전 각도
     굶 주 린 사람 은 천성적으로 스 레 드 가 안전 하기 때문에 다 중 스 레 드 에 직접 사용 할 수 있 고 문제 가 발생 하지 않 습 니 다. 게 으 른 사람 자 체 는 비 스 레 드 가 안전 하기 때문에 스스로 스 레 드 안전 을 실현 하 는 방법 이 필요 합 니 다.

좋은 웹페이지 즐겨찾기