단일 모드 의 이중 잠 금 원리
public class SingleTon {
private static SingleTon singleTon = null;
public SingleTon() {
// TODO Auto-generated constructor stub
}
public static SingleTon getInstance(){
if (singleTon == null) {
synchronized (SingleTon.class) {
if (singleTon == null) {
singleTon = new SingleTon();
}
}
}
return singleTon;
}
}
왜 이중 검 사 를 사용 하여 잠 금 을 해 야 합 니까?위의 글 은 이미 대충 한 번 말 했다.
이러한 상황 을 고려 하면 두 개의 스 레 드 가 동시에 도착 하 는 것 이다. 즉, getInstance () 방법 을 동시에 호출 하 는 것 이다.
이 때 singleTon = = null, 그래서 두 스 레 드 모두 첫 번 째 무 거 운 것 을 통과 할 수 있 음 이 분명 합 니 다. singleTon == null ,
첫 번 째 if 문장 에 들 어간 후 자물쇠 메커니즘 이 존재 하기 때문에 하나의 라인 이 lock 문장 에 들 어가 고 두 번 째 문장 에 들 어 갑 니 다 singleTon == null ,
다른 스 레 드 는 lock 문장의 밖에서 기다 릴 것 입 니 다.
첫 번 째 스 레 드 가 new 를 실행 하면 SingleTon () 문 구 를 사용 하면 잠 금 영역 을 종료 합 니 다. 이때 두 번 째 스 레 드 는 lock 구문 블록 에 들 어 갈 수 있 습 니 다.
이때 두 번 째 무게 가 없다 면 singleTon = = null 이면 두 번 째 스 레 드 는 new 를 호출 할 수 있 습 니 다. singleTon () 문장,
이렇게 두 번 째 스 레 드 도 하나 만 들 거 예요. 싱글 톤 인 스 턴 스, 이것 도 하나의 사례 모델 의 취지 에 어 긋 난다.
그래서 여 기 는 잠 금 검 사 를 이중 으로 해 야 합 니 다.
세심 한 친 구 는 내 가 첫 번 째 singleton = null 을 제거 하면 프로그램 이 다 중 스 레 드 에서 잘 실 행 될 수 있다 는 것 을 알 게 될 것 이다.
첫 번 째 싱글 톤 = = null 이 없 는 상황 에서
두 개의 라인 이 동시에 도착 하면 lock 메커니즘 이 존재 하기 때문에 첫 번 째 라인 은 lock 문장 블록 에 들 어가 고 new SingleTon () 을 순조롭게 실행 할 수 있 습 니 다.
첫 번 째 스 레 드 가 lock 구문 블록 을 종료 할 때 singleTon 이라는 정적 변 수 는 null 이 아니 기 때문에 두 번 째 스 레 드 가 lock 에 들 어 갈 때,
아니면 두 번 째 singleton = = null 에 의 해 밖 에 가 려 져 new Singleton () 을 실행 할 수 없습니다.
그래서 첫 번 째 singleton = = null 이 없 는 상황 에서 도 단일 모드 를 실현 할 수 있 습 니까?그렇다면 왜 1 중 singleton = = null 이 필요 할 까?
여기 서 성능 문제 가 발생 했 습 니 다. 단일 모드 에 대해 서 는 new SingleTon () 이 한 번 만 실행 하면 되 기 때 문 입 니 다.
첫 번 째 singleTon = = null 이 없 으 면 getInstance () 에 들 어 갈 때마다 잠 금 동작 을 실행 하여 스 레 드 동기 화 를 실현 합 니 다.
이것 은 매우 성능 을 소모 하 는 것 이다. 만약 내 가 첫 번 째 싱글 톤 = null 을 더 하면...
그러면 첫 번 째, 즉 singleTton = = null 이 설립 되 었 을 때 한 번 의 잠 금 을 실행 하여 스 레 드 동기 화 를 실현 합 니 다.
이후 에는 싱글 톤 인 스 턴 스 로 바로 돌아 가면 OK 이 고 lock 구문 블록 에 들 어가 지 않 아 도 됩 니 다. 그러면 스 레 드 동기 화 에 따 른 성능 문 제 를 해결 할 수 있 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
디자인 모델 의 공장 모델, 단일 모델자바 는 23 가지 디자인 모델 (프로 그래 밍 사상/프로 그래 밍 방식) 이 있 습 니 다. 공장 모드 하나의 공장 류 를 만들어 같은 인 터 페 이 스 를 실현 한 일부 종 류 를 인 스 턴 스 로 만 드 는 것...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.