독서 노트 (1) 제1장 단일 모델

단일 모델 은 실제 개발 에서 사용 하 는 방법 도 비교적 간단 하 다. 일반적으로 유일한 인 스 턴 스 를 얻어 내부 의 정적 방법 을 호출 하 는 것 이다. 여 기 는 군말 을 많이 하지 않 고 자주 사용 하 는 단일 모델 에 사용 하 는 세 가지 방법 을 기록 하 는 것 이다.
추가: 다 중 스 레 드 병행 작업, 단일 모드 의 정확 한 쓰기, Volatile 키 워드 를 추가 합 니 다.http://www.race604.com/java-double-checked-singleton/
단일 모드 - 방법:
1. private 구조 함 수 를 가지 고 대외 적 으로 개방 하지 않 습 니 다.
2. static 정적 방법 으로 단일 클래스 대상 을 되 돌려 줍 니 다.
3. 다 중 스 레 드 환경 에서 단일 클래스 의 대상 이 있 고 하나 밖 에 없 음 을 확보한다.
장점:
1. 메모리 에 하나의 인 스 턴 스 만 있 고 메모리 지출 을 줄인다.
2. 자원 의 다 중 점용 을 피한다.
단점:
1. 틈새 없 이 확장 어려움
2. 단일 대상 이 context 를 가지 고 있 으 면 메모리 유출 이 발생 하기 쉽다.
스 레 드 동기 화 를 고려 하여 Volatile 키 워드 를 추가 하 는 단일 모드:
private static volatile SettingsDbHelper sInst = null;  // <<<       volatile  
public static SettingsDbHelper getInstance(Context context) {  
    SettingsDbHelper inst = sInst;  // <<<          
    if (inst == null) {
        synchronized (SettingsDbHelper.class) {
            inst = sInst;
            if (inst == null) {
                inst = new SettingsDbHelper(context);
                sInst = inst;
            }
        }
    }
    return inst;  // <<<             
}

자주 사용 하 는 단일 모드 코드 세 션:
static //Double CheckLock(DCL)    
	class SingletonTwo{
		private static SingletonTwo mInstance = null;
		//      
		private SingletonTwo(){
			
		}
		
		public static SingletonTwo getInstance(){
			if (mInstance == null) {
				synchronized (SingletonTwo.class) { //      ,   DCL         ,
					if (mInstance == null) {
						mInstance = new SingletonTwo();
					}
				}
			}
			return mInstance;
		}
	}
static //    
    class SingletonThree{
        private static SingletonThree mInstance;
        //      
        private SingletonThree(){
            
        }
        
        public static synchronized SingletonThree getInstance(){
            if (mInstance == null) {
                mInstance = new SingletonThree();
            }
            return mInstance;
        }
    }
static //           
	class SingletonFour{
		//      
		private SingletonFour(){
			
		}
		
		public static SingletonFour getInstance(){
			return SingletonFourHolder.mInstance;
			
		}
		
		/*
		 *      
		 */
		private static class SingletonFourHolder{
			private static final SingletonFour mInstance = new SingletonFour();
		}
	}

좋은 웹페이지 즐겨찾기