양피서 APP(Android Edition) 개발 시리즈(22) 10분 초 이해 단일 모드

3166 단어
단례 모델은 실제 개발 과정에서 자주 사용되기 때문에 우리는 단례 모델을 충분히 이해할 필요가 있다.일례 모델은 여러 가지 문법이 있는데 게으름뱅이식, 굶주림식, 이중 자물쇠 등으로 나뉜다.

단일 모드 정의:

  • 단일 모드: 하나의 클래스가 하나의 실례만 있고 전체적인 접근점을 제공할 수 있도록 보장합니다.

  • 단일 모드의 이점:

  • 빈번하게 사용되는 대상에 대해 대상을 만드는 데 걸리는 시간을 생략할 수 있는데 이것은 중량급 대상에게 매우 굉장한 시스템 비용이다.
  • new 조작 횟수가 감소하기 때문에 시스템 메모리에 대한 사용 빈도도 낮아진다. 이것은 GC의 압력을 줄이고 GC의 정지 시간을 단축시킬 것이다.

  • 아사자식:

    public class Singleton1 {
        // 
        private Singleton() {}
        //  
        private static final Singleton single = new Singleton();
        //  
        public static Singleton getInstance() {
            return single;
        }
    }
    
  • 이 클래스가 불러올 때 new Singleton () 라는 말이 실행되고 get Instance () 가 호출되지 않아도 클래스가 초기화됩니다.그러나 우리는 그가 내가 처음 getInstance () 를 했을 때 비로소 진정으로 만들어졌으면 한다.이렇게 하면, 우리는 클래스 생성을 클래스 마운트에 의뢰하지 않고, 진정한 클래스 생성을 제어할 수 있다.

  • 게으름뱅이식(一):

    public class Singleton {  
        private static Singleton instance;  
        private Singleton (){}  
      
        public static Singleton getInstance() {  
        if (instance == null) {  
            instance = new Singleton();  
        }  
        return instance;  
        }  
    }
    
  • 단일 스레드에서만 사용할 수 있으며 다중 스레드에서는 제대로 작동하지 않습니다.

  • 게으름뱅이식(二):

    public class Singleton {  
        private static Singleton instance;  
        private Singleton (){}  
        public static synchronized Singleton getInstance() {  
        if (instance == null) {  
            instance = new Singleton();  
        }  
        return instance;  
        }  
    } 
    
  • 멀티스레드 중에서도 뛰어난 성능을 제공합니다.

  • 정적 내부 클래스:

    public class Singleton {  
        private static class SingletonHolder {  
            private static final Singleton INSTANCE = new Singleton();  
        }  
        private Singleton (){}  
        public static final Singleton getInstance() {  
            return SingletonHolder.INSTANCE; 
        }  
    }
    
  • 이런 방식은 Effective Java에서 추천한다.이러한 쓰기 방식은 여전히 JVM 자체 메커니즘을 사용하여 스레드 보안 문제를 보장한다.Singleton Holder는 개인적인 것이기 때문에 getInstance () 를 제외하고는 접근할 수 없기 때문에 게으름뱅이식입니다.동시에 실례를 읽을 때 동기화되지 않고 성능 결함이 없다.JDK 버전에도 의존하지 않습니다.

  • 이중 잠금 확인:

    public class Singleton {
        private volatile static Singleton singleton;
    
        private Singleton() {
        }
    
        public static Singleton getSingleton() {
            if (singleton == null) {
                synchronized (Singleton.class) {
                    if (singleton == null) {
                        singleton = new Singleton();
                    }
                }
            }
            return singleton;
        }
    } 
    
  • volatile 명령 재배열 최적화 금지.즉volatile 변수의 값 부여 작업 뒤에 메모리 장벽(생성된 어셈블리 코드에)이 있어 읽기 작업이 메모리 장벽 앞에 다시 정렬되지 않는다는 것이다.JDK 1.5 이상에서만 사용 가능, JDK 1.5 이전에는 사용할 수 없습니다.

  • 요약:

  • 은 흔하지만 일반적으로 을 사용하는 방식에 치우친다.
  • 는 방식도 좋지만 JDK의 제약을 받는다. 만약에 JDK 1.5 이상에서 사용하면 전혀 문제가 없다.
  • 안드로이드 개발에서 소스 오픈 프레임워크인 안드로이드-Universal-Image-Loader의 ImageLoader에서'이중 검사 자물쇠'를 사용하기 때문에 안드로이드 개발에서 우리는'이중 검사 자물쇠'를 직접 사용할 수 있다.
  • 안드로이드 개발에서 단일 모델은 우리의 업무에 대한 봉인 클래스에 자주 사용된다. 예를 들어 네트워크에 요청한 봉인, 그림 불러오는 봉인 등이다.

  • 단일 모드에서 사용하는 실제 예는 다음 편을 보십시오.

    좋은 웹페이지 즐겨찾기