단일 모드 코드
//
public class Singleton {
private final static Singleton instance = new Singleton();
private Singleton(){}
public static Singleton getInstance(){
return s;
}
}
2, 굶주림식(정적 코드 블록-----스레드 보안)
public class Singleton {
private static Singleton instance;
static {
instance = new Singleton();
}
private Singleton() {}
public Singleton getInstance() {
return instance;
}
}
장점: 간단하고 거칠며 클래스를 불러올 때 직접 이 클래스를 실례화하여 라인의 동기화를 피한다.
단점: 자원 효율이 높지 않습니다. getInstance () 는 영원히 실행되지 않을 수도 있지만, 이 클래스를 실행하는 다른 정적 방법이나 클래스 (class. forName) 를 불러오면 이 실례는 임의로 초기화됩니다.
3, 게으름뱅이식(라인이 안전하지 않다---잠금 메커니즘을 추가하지 않는다)
4
public class Singleton {
private static Singleton singleton;
private Singleton() {}
public static Singleton getInstance() {
if(singleton== null){
singleton = new Singleton();
}
return singleton;
}
}
4, 게으름뱅이식(메소드 동기화 ---동기화 잠금 추가)public class Singleton {
private static Singleton singleton;
private Singleton() {}
public static synchronized Singleton getInstance() {
if (singleton == null) {
singleton = new Singleton();
}
return singleton;
}
}
5, 게으름뱅이식(스레드 보안 ---동기화 코드 블록)
public class Singleton {
private static Singleton singleton;
private Singleton() {}
public static Singleton getInstance() {
if (singleton == null) {
synchronized (Singleton.class) {
singleton = new Singleton();
}
}
return singleton;
}
}
6, 이중 검사
public class Singleton {
private static volatile Singleton singleton;
private Singleton() {}
public static Singleton getInstance() {
if (singleton == null) {
synchronized (Singleton.class) {
if (singleton == null) {
singleton = new Singleton();
}
}
}
return singleton;
}
}
7, 정적 내부 클래스
public class Singleton {
private Singleton() {}
private static class SingletonInstance {
private static final Singleton INSTANCE = new Singleton();
}
public static Singleton getInstance() {
return SingletonInstance.INSTANCE;
}
}
8, 열거
public enum Singleton {
INSTANCE;
public void whateverMethod() {
}
}
힌트: 일반적으로 굶주린 방식을 사용하는데 자원에 대해 매우 신경을 쓰면 정적 내부류를 사용할 수 있고 게으름뱅이와 이중 검사를 권장하지 않는다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.