java 단일 모드 사용 설명

2335 단어 java단일 모드
단례 모델은 모두가 이미 잘 알고 있을 것이다. 통상적으로 그 실현 방식은 다음과 같은 두 가지로 나뉜다.

//
public class Singleton{
    private static Singleton instance = null;   
    private Singleton(){}
    public static newInstance(){
        if(null == instance){
            instance = new Singleton();
        }
        return instance;
    }
    public void doSomething(){
     // Do something ...
    }
}

//
public class Singleton{
    private static Singleton instance = new Singleton();
    private Singleton(){}
    public static Singleton newInstance(){
        return instance;
    }
    public void doSomething(){
     // Do something ...
     }
}

단리 모드의 사용에서 게으름뱅이식과 아한식은 서로 다른 응용 장면이 있다. 만약에 단리 대상을 만드는 것이 메모리를 차지하지만 응용 시작 시 반드시 사용해야 하는 것이 아니라면 우리는 일반적으로 게으름뱅이식을 사용하고 정말 단리를 사용해야 할 때 그것을 만들 수 있다. 만약에 프로젝트가 시작되면 바로 사용하려면 아한 모드를 사용해서 초기화하는 것이 단리 대상을 만들 수 있다.
상기 두 가지 모델에서 만약에 다중 스레드의 경우 아한식은 문제가 발생하지 않는다. 왜냐하면 JVM은 단리 클래스를 한 번만 불러올 수 있기 때문이다. 그러나 게으름뱅이식은 단리 대상을 반복적으로 만드는 문제가 발생할 수 있기 때문에 스레드가 안전하지 않다.
그럼 굶주린 한식의 단리 모드도 안전하게 할 방법이 없을까요?답은 틀림없이 있을 것이다. 여러분은 보통 동기화 자물쇠를 넣는 방식으로 실현하지만, 이렇게 실현하는 것은 비교적 번거롭기 때문에 우리는 JVM의 클래스 불러오는 메커니즘을 이용하여 실현할 수 있다.많은 경우에 JVM은 다음과 같은 동기화 제어를 제공합니다.
a. static {} 블록에서 초기화된 데이터
b.final 필드에 접근할 때 등등.
JVM이 클래스 로딩을 진행할 때 데이터가 동기화되는 것을 보증합니다. 우리는 이렇게 할 수 있습니다.
클래스 내부 클래스를 사용하여 이 내부 클래스에서 대상의 실례를 만듭니다.이렇게 하면 클래스 내부 클래스를 사용하지 않으면 대상 실례를 만들지 않고 게으름뱅이식 지연 불러오기와 스레드 안전을 실현할 수 있다.

public class Singleton{
    // ,
    private static class SingletonHolder{
        public static Singleton instance = new Singleton();
    }

    private Singleton(){}

    public static Singleton newInstance(){
        return SingletonHolder.instance;
    }

    public void doSomething(){
        //do something
    }
}
이렇게 하면 라인이 안전한 기아식 단리 모델을 실현할 수 있다.
또한 우리는 매거 유형을 통해 단리 모델을 실현할 수 있는데 이것도 비교적 추천하는 방식이다.
열거 유형을 사용하여 단일 예제 모드는 다음과 같습니다.

public enum Singleton{
    // , Singleton
    instance;

    public void doSomething(){
        // do something ...
    }   
}
Ok, 단례 모드는 여기에 소개합니다.

좋은 웹페이지 즐겨찾기