Java 디자인 모드 - 게으름뱅이 단일 모드
2214 단어 Java 디자인 모드
게으름뱅이 단일 모드 외부 클래스에 호출될 때 실례를 만듭니다. 클래스가 불러오는 속도가 빠르지만 실행할 때 대상을 가져오는 속도가 느립니다.
2. 실례
1> 방법상synchronized 자물쇠를 사용하여 동기화를 진행하는데 이 동기화 방법의 영향 구역이 너무 커서 여러 대상이 이 대상을 얻으려고 할 때 여기에 줄을 서는 것이 단점이다.
public class LazySingleton{
private static LazySingleton intance =null;
private LazySingleton(){}
public static synchronized LazySingleton getInstance(){
if(instance == null){
instance = new LazySingleton();
}
return instance;
}
}
2> 방법체에서 이중 검사 자물쇠를 사용하여 메모리 공간을 절약하고 라인의 안전을 확보한다.
public class LazySingleton{
private static LazySingleton instance = null;
private LazySingleton(){}
public static LazySingleton getInstance(){
if(instance == null){
synchronized(LazySingleton.class){
if(instance == null){
instance = new LazySingleton();
}
}
}
return instance;
}
}
jvm에 난순서 실행 기능이 존재하기 때문에 DCL도 안전하지 않은 상황이 발생할 수 있다. 사실 jvm에서의 실행은 세 단계로 나뉜다.
1.메모리를 쌓아 메모리 공간을 열다. 2.SingleTon의 매개 변수를 메모리에서 인스턴스화합니다. 3.대상을 메모리 공간으로 가리키다.
jvm에 난순서 실행 기능이 존재하기 때문에 2가 실행되지 않았을 때 3을 먼저 실행했을 수도 있습니다. 이때 라인 B로 전환되면 3을 실행했기 때문에 인스타그램은 비어 있지 않고 바로 꺼내서 사용할 수 있습니다. 그러면 이상이 발생합니다.이것이 바로 유명한 DCL의 실효 문제다.
바로 JDK1.6 및 이후, private volatile static LazySingleton instance=null로 정의하면 됩니다.DCL 실효 문제를 해결할 수 있습니다.volatile는 INSTANCE가 매번 메인 메모리에서 읽을 수 있도록 확보하는데, 이렇게 하면 약간의 효율도 희생되지만, 품위에는 손상이 없다.
3> 내부 클래스를 이용한 단일 사례
public class Singleton{
private Singleton(){}
public Static getInstance(){
return SingleHolder.instance;
}
private class SingleHolder{
private static Singleton instance = new Singleton();
}
}
이 실현에서 내부 클래스로 단례를 보호한다. Singleton 클래스가 불러올 때 내부 클래스가 초기화되지 않기 때문에 Singleton 클래스가 JVM에 불러올 때 단례 클래스를 초기화하지 않는다. getInstance 방법이 호출될 때 SingleHolder를 불러와서 instance를 초기화할 수 있다. 또한 실례의 구축은 클래스가 불러올 때 완성되기 때문에 천성적으로 다중 라인에 우호적이다.getInstance () 방법도synchronized 수식을 사용할 필요가 없기 때문에, 이러한 실현은 앞의 두 가지 쓰기 방법의 장점 (마운트 지연, 비동기화) 을 겸용할 수 있다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Java 디자인 모드 - 플랜트 메소드 모드(2)공장 방법 모델은 공장 모델로 약칭하여 창설형 모델의 일종에 속한다. 공장 방법 모델에서 공장 부류는 제품 대상의 공공 인터페이스를 만들고 공장 부류는 구체적인 제품 대상을 생성한다.공장 부류에서 제품류의 실례화 조...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.