소기 자바 단일 모드 의 각종 실현
1. 굶 주 린 법:
public class Singleton {
private static final Singleton instance = new Singleton();
private Singleton(){}
public static Singleton getInstance(){
return instance;
}
}
이것 은 가장 간단 한 방법 으로 클래스 를 인용 할 때 실례 화 된다.로드 를 지연 시 킬 수 없습니다. 어떤 의미 에서 시스템 의 부하 가 증가 합 니 다.
2. 게으름뱅이 법:
public class Singleton {
private static Singleton instance = null;
private Singleton(){}
public static Singleton getInstance(){
if(instance == null){
instance = new Singleton();
}
return instance;
}
}
배 고 픈 한 법 을 바탕 으로 로드 지연 을 추 가 했 습 니 다. getInstance 를 호출 하 는 방법 만 대상 을 예화 할 수 있 습 니 다. 단일 스 레 드 에 서 는 문제 가 없 지만 다 중 스 레 드 에 서 는 여러 번 예화 할 수 있 습 니 다.
3. 다 중 스 레 드 보안 형:
public class Singleton {
private static volatile Singleton instance = null;
private Singleton(){}
public static Singleton getInstance(){
synchronized (Singleton.class) {
if (instance == null) {
instance = new Singleton();
}
}
return instance;
}
}
instance 대상 에 volatile 키 워드 를 추가 하여 모든 스 레 드 에 대한 가시 성 을 확보 하고 명령 에 대한 정렬 최 적 화 를 금지 합 니 다.null 과 new 를 판단 하 는 부분 에 자 물 쇠 를 추가 합 니 다.그러나 호출 할 때마다 synchronize 잠 금 체 제 를 통 해 줄 을 서서 기다 리 면 효율 적 인 문제 가 생 길 수 있 습 니 다.
4. 다 중 스 레 드 안전성 병행 효율 (이중 검사 자물쇠):
public class Singleton {
private static volatile Singleton instance = null;
private Singleton(){}
public static Singleton getInstance(){
if(instance == null) {
synchronized (Singleton.class) {
if (instance == null) {
instance = new Singleton();
}
}
}
return instance;
}
}
synchronized 키워드 바깥쪽 에 판단 null 을 추가 하면 null 이후 에 만 방법 에 들 어 갈 수 있 으 며 대부분의 잠 금 동작 을 줄 일 수 있 습 니 다.
= = 주의: volatile 키 워드 는 JDK 1.5 이전에 명령 최적화 정렬 을 완전히 보장 할 수 없 기 때문에 JDK 1.5 이전에 이중 검증 에 문제 가 있 습 니 다 = =
5. 정적 내부 클래스
public class Singleton {
private Singleton(){}
private static class Holder{
private static Singleton instance = new Singleton();
}
public static Singleton getInstance(){
return Holder.instance;
}
}
생 성 과정 을 정적 내부 클래스 에 두 고 정적 내부 클래스 는 호출 될 때 만 불 러 오기 때문에 지연 불 러 오기 에 부합 합 니 다.정적 내부 클래스 는 한 번 만 불 러 오기 때문에 라인 이 안전 합 니 다.
이상 의 모든 방식 은 직렬 화 할 때 추가 작업 (Serializable, transient, readResolve () 이 필요 합 니 다. 그렇지 않 으 면 반 직렬 화 할 때 새로운 인 스 턴 스 를 만 듭 니 다.
6. 매 거 방식:
public enum Singleton {
INSTACE;
private String name;
public String getName() {
return name;
}
}
매 거 진 방식 으로 이 루어 진 단일 모드 를 사용 하여 자체 스 레 드 안전 과 반사 방지 강제 호출 구조 기 를 제공 하고 자동 직렬 화 체 제 를 제공 하여 반 직렬 화 를 방지 할 때 새로운 대상 을 만 듭 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.