자바 단일 모드 최적화 쓰기

2368 단어 디자인 모드
방법 1: 추천
public class SingletonClass {
    
  private static class SingletonClassInstance {
    private static final SingletonClass instance = new SingletonClass();
  }

  public static SingletonClass getInstance() {
    return SingletonClassInstance.instance;
  }

  private SingletonClass() {

  }
    
}

이런 방식 에서 단일 모드 는 내부 클래스 를 사용 하여 단일 사례 의 실현 을 유지 하고 JVM 내부 의 체 제 는 하나의 클래스 가 불 러 올 때 이런 로드 과정 은 스 레 드 가 서로 배척 하 는 것 을 보장 할 수 있다.이렇게 하면 getInstance 를 처음 호출 할 때 JVM 은 인 스 턴 스 가 한 번 만 생 성 되 는 것 을 보증 할 수 있 고 인 스 턴 스 에 할당 한 메모리 초기 화 를 보장 할 수 있 습 니 다.이 방법 은 첫 번 째 호출 때 만 상호 배척 체 제 를 사용 해 저 성능 문 제 를 해결 했다.
이 버 전의 단일 모드 구현 코드 에서 우 리 는 자바 의 정적 내부 클래스 를 사용 했다.이 기술 은 JVM 에 의 해 명 확 히 설 명 된 것 이기 때문에 어떠한 이의 성도 존재 하지 않 는 다.이 코드 에 서 는 SingletonClass 에 static 속성 이 없 기 때문에 초기 화 되 지 않 습 니 다.getInstance () 를 호출 할 때 까지 SingletonClassInstance 클래스 를 먼저 불 러 옵 니 다. 이 클래스 는 static 의 SingletonClass 인 스 턴 스 가 있 기 때문에 SingletonClass 의 구조 방법 을 호출 한 다음 getInstance () 는 이 내부 클래스 의 인 스 턴 스 를 사용자 에 게 되 돌려 줍 니 다.이 인 스 턴 스 는 static 이기 때문에 여러 번 구성 되 지 않 습 니 다.
Singleton ClassInstance 는 개인 정적 내부 클래스 이기 때문에 다른 클래스 에 알려 지지 않 습 니 다. 마찬가지 로 static 의미 도 여러 개의 인 스 턴 스 가 존재 하지 않도록 요구 합 니 다.또한 JSL 규범 에 따 르 면 유형의 구 조 는 반드시 원자 적 이 고 동시 다발 적 이지 않 아야 하기 때문에 동기 화 블록 을 추가 할 필요 가 없다.마찬가지 로 이 구 조 는 동시 다발 적 이기 때문에 getInstance () 도 동기 화 할 필요 가 없다.
 
방법 2:
public class SingletonTest {  

    private static SingletonTest instance = null;  
  
    private SingletonTest() {  
    }  
  
    private static synchronized void syncInit() {  
        if (instance == null) {  
            instance = new SingletonTest();  
        }  
    }  
  
    public static SingletonTest getInstance() {  
        if (instance == null) {  
            syncInit();  
        }  
        return instance;  
    }  
}

방법 3:
public class SingletonClass {

  private static SingletonClass instance = null;

  public static SingletonClass getInstance() {
    if (instance == null) {
      synchronized (SingletonClass.class) {
        if (instance == null) {
          instance = new SingletonClass();
        }
      }
    }
    return instance;
  }

  private SingletonClass() {

  }

}

참고:http://devbean.blog.51cto.com/448512/203501/
           http://blog.csdn.net/longyulu/article/details/9159589
 

좋은 웹페이지 즐겨찾기