자바 디자인 모드 의 단일 예 모드 (Singleton)
okHttp 를 정리 할 때 네트워크 요 구 를 관리 하기 위해 단일 모델 을 사 용 했 습 니 다. 저녁 에 상태 가 별로 없습니다. 마음 을 가 라 앉 히 고 사용 빈도 가 가장 높 은 디자인 모델 의 단일 모델 을 정리 하 는 것 을 배 웠 습 니 다.
단일 모드:
단일 모드 는 하나의 인 스 턴 스 만 있 고 자체 적 으로 예화 되 어 전체 시스템 에 이 인 스 턴 스 를 제공 하도록 확보 합 니 다.
단일 특징:
4. 567917. 단일 사례 류 는 하나의 사례 만 있 을 수 있다
4. 567917. 단일 클래스 는 자신 이 자신의 유일한 인 스 턴 스 를 만들어 야 합 니 다
4. 567917. 단일 클래스 는 모든 다른 대상 에 게 이 인 스 턴 스 를 제공 해 야 합 니 다
단일 분류:
1) 게으름뱅이
(1) 비 스 레 드 안전 실현
public class Singleton {
private Singleton(){
}
private static Singleton instance;
public static Singleton getInstance(){
if(instance == null){
instance = new Singleton();
}
return instance;
}
}
(2) 스 레 드 안전 실현 방식 1 방법 과 동기 화 이런 실현 방식 은 효율 이 높 지 않다.
public class Singleton {
private Singleton(){
}
private static Singleton instance;
public static synchronized Singleton getInstance(){
if(instance == null){
instance = new Singleton();
}
return instance;
}
}
(3.) 라인 안전 실현 방식 이중 검사 잠 금
public class Singleton{
private static Singleton single; //
private Singleton(){} //
public static Singleton getSingle(){ //
if(single == null){
synchronized (Singleton.class) { //
if(single == null){
single = new Singleton();
}
}
}
return single; //
}
}
2.) 굶 주 린 한식 일례 류
굶 주 린 사람 은 클래스 를 만 드 는 동시에 정적 인 대상 을 만들어 시스템 에 사용 하도록 했 습 니 다. 이후 에는 변 하지 않 기 때문에 천성적으로 스 레 드 가 안전 합 니 다.
public class Singleton {
private Singleton(){
}
private final static Singleton instance = new Singleton();
private static Singleton getInstance(){
return instance;
}
}
3. 내부 유형
내부 클래스 에 서 는 로드 지연 을 실현 합 니 다. getInstance () 를 호출 해야만 유일한 인 스 턴 스 를 메모리 에 만 들 수 있 습 니 다. 또한 게으름뱅이 식 다 중 스 레 드 문 제 를 해결 할 수 있 습 니 다. 해결 방식 은 Classloader 의 특성 을 이용 하여 스 레 드 안전 을 실현 할 뿐만 아니 라 동기 화 에 따 른 성능 영향 도 피 할 수 있 습 니 다.
public class Singleton{
private Singleton(){
}
private class SingletonHoledr(){
private static Singleton instance = new Singleton();
}
private static Singleton getInstance(){
return SingletonHoledr.instance;
}
}
4.) 매 거 진 사례
'Effective Java' 저자 가 추천 하 는 방법, 장점: 다 중 스 레 드 동기 화 문 제 를 피 할 수 있 을 뿐만 아니 라 반 직렬 화 를 방지 하여 새로운 대상 을 다시 만 드 는 것 도 방지 할 수 있다.
public enum Singleton {
/**
* , Singleton 。
*/
uniqueInstance;
/**
*
*/
public void doSomeThing(){
//
}
}
5. 게으름뱅이 와 배 고 픈 남자 의 구별
(1) 각도 초기 화
굶 주 린 사람 은 불 러 오 면 하나의 예 를 초기 화 하 는 것 입 니 다. getInstance 를 보장 할 때 하나의 예 는 이미 존재 합 니 다. 게 으 른 사람 은 게 을 러 서 getInstance 를 호출 할 때 만 이 예 를 초기 화 합 니 다.
(2) 스 레 드 안전 각도
굶 주 린 사람 은 천성적으로 스 레 드 가 안전 하기 때문에 다 중 스 레 드 에 직접 사용 할 수 있 고 문제 가 발생 하지 않 습 니 다. 게 으 른 사람 자 체 는 비 스 레 드 가 안전 하기 때문에 스스로 스 레 드 안전 을 실현 하 는 방법 이 필요 합 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.