단일 모드 빗질
1. 개인 구조 함수
2. 정적 대상 인 스 턴 스
3. 정적 으로 대상 을 가 져 오 는 방법
다 중 스 레 드 안전 을 확보 하기 위해 서 는 세 가지 해결 방법 이 있다.
첫 번 째: 인 스 턴 스 를 동기 화 하 는 방법
package com.test.single;
public class Single {
private static Single instance;
private Single() { }
public static synchronized Single getInstacne() {
if (null == instance) {
instance = new Single();
}
return instance;
}
}
평가: 스 레 드 는 안전 하지만 성능 이 떨 어 집 니 다. 이 인 스 턴 스 를 가 져 올 때마다 스 레 드 안전 판단 이 필요 합 니 다.
두 번 째 이중 검사
package com.test.single;
public class DoubleCheck {
private volatile static DoubleCheck instance; // volatile ,
private DoubleCheck () {
}
public static DoubleCheck getInstance(){
if (null == instance) {
synchronized (DoubleCheck.class) { // , LOCK
if (null == instance) {
instance = new DoubleCheck();
}
}
}
return instance;
}
}
평가: 매번 인 스 턴 스 대상 에 갈 필요 가 없습니다. JDK 1.5 이전 버 전 은 스 레 드 안전 을 보장 할 수 없고 JDK 버 전 제한 이 있 습 니 다.
세 번 째: 게으름뱅이 생 성 대상
package com.test.single;
public class LazySingle {
private static LazySingle instance = new LazySingle();
private LazySingle() { }
public static LazySingle getInstacne() {
return instance;
}
}
평가: 인 스 턴 스 대상 에 직접 있 을 때 정적 으로 초기 화 되 어 인 스 턴 스 의 유일한 것 을 보장 합 니 다.그러나 어떤 경우 에는 대상 이 사용 되 지 않 고 이 대상 이 크 면 자원 이 소모 된다.
이런 게으름뱅이 식 의 방법 에는 또 하나의 변종 이 있 는데, 정적 내부 류 로 실례 의 유일한 것 을 보증 했다
네 번 째: 정적 내부 클래스
package com.test.single;
public class SingleInnner {
private SingleInnner(){}
static class InstanceHandle {
static volatile SingleInnner instance = new SingleInnner();
}
public static SingleInnner getInstacne() {
return InstanceHandle.instance;
}
}
평가: 사실 이런 방식 의 등장 초기 에는 double - check 문 제 를 해결 하기 위해 서 였 습 니 다. 사실은 본질 적 으로 게으름뱅이 식 방법 이 었 습 니까? 아니면 클래스 로 딩 할 때 정적 인 인 인 스 턴 스 를 초기 화 했 습 니까?화려 하 게 놀 았 을 뿐 이 고 더 복잡 해 졌 습 니 다. 3 중 을 비교 해 보 려 면 별 차이 가 없습니다!그냥 참고 로!
단일 사례 에서 주의해 야 할 몇 가지 점:
1. 단일 사례 의 등장 을 해결 하기 위해 시스템 에서 하나의 대상 인 스 턴 스 만 보장 하지만 사용 하 는 상황 이 많 지 않 을 것 입 니 다. 너무 많 으 면 디자인 에 문제 가 존재 하 는 것 입 니 다!
2. 여러 종류의 로 더 가 존재 한다 면 하나의 예 는 효력 을 잃 게 됩 니 다.
3. JDK 1. 2 에 서 는 단일 대상 을 회수 하 므 로 레 지 스 트 를 작성 해 야 합 니 다.
4. 성능 과 자원 을 종합 적 으로 고려 하고 적당 한 방안 을 선택 하여 다 중 스 레 드 문 제 를 해결 합 니 다. 기본 적 인 상황 에서 우 리 는 모든 장면 이 다 중 스 레 드 라 고 생각 합 니 다!
일반적인 단일 인 스 턴 스 장면:
스 레 드 탱크, 캐 시, 레 지 스 트 등!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
디자인 모델 의 공장 모델, 단일 모델자바 는 23 가지 디자인 모델 (프로 그래 밍 사상/프로 그래 밍 방식) 이 있 습 니 다. 공장 모드 하나의 공장 류 를 만들어 같은 인 터 페 이 스 를 실현 한 일부 종 류 를 인 스 턴 스 로 만 드 는 것...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.