디자인 모드: 단일 모드 의 쓰기 (기초 쓰기 와 스 레 드 안전 쓰기)
2624 단어 디자인 모드
(A 가지 표기 법):
package singleton;
public class SingletonInstance {
private static SingletonInstance mSingletonInstance = null;
// private, new SingletonInstance()。
private SingletonInstance() {
}
public static SingletonInstance getInstance() {
if (mSingletonInstance == null) {
mSingletonInstance = new SingletonInstance();
}
return mSingletonInstance;
}
}
A 쓰 기 는 단일 모드 에서 가장 간단 하고 기본 적 이 며 뚜렷 한 쓰 기 였 으 나 안 타 깝 게 도 이런 쓰 기 는 라인 이 안전 하지 않 은 코드 쓰 기 였 다.만약 에 이런 종류 가 N 여러 개의 스 레 드 에서 동시에 방문 되 어 사용 된다 고 가정 한다. 특히 이런 종류 가 데이터 베이스 방문 등 스 레 드 안전 문제 에 민감 한 코드 응용 장면 과 관련 되면 그 결 과 는 재앙 이 될 것 이다.
그러나 단일 모델 의 A 가지 쓰기 도 광범 위 한 장면 이 있다. 스 레 드 안전 을 요구 하지 않 고 동기 화 수요 가 없 으 며 효율 적 인 우선 순위 가 높 은 장면 에서 단일 모델 의 A 가지 쓰기 방법 을 추천 한다.
B 종 쓰기 (스 레 드 보안 쓰기 1):
package singleton;
public class SingletonInstance {
private static SingletonInstance mSingletonInstance = null;
// private, new SingletonInstance()。
private SingletonInstance() {
}
public static synchronized SingletonInstance getInstance() {
if (mSingletonInstance == null) {
mSingletonInstance = new SingletonInstance();
}
return mSingletonInstance;
}
}
단일 모드 의 B 가지 문법 은 사실 A 가지 문법 을 바탕 으로 개선 한 것 이다. 요점 은 동기 화 메커니즘 인 synchronized 를 추가 한 것 이다.synchronized, 동기 화 는 특정한 의미 에서 볼 때 차단 입 니 다. 차단 의 결 과 는 임의의 시간 입 니 다. 하나의 스 레 드 만 이 동기 화 방법 체 의 코드 에 접근 할 수 있 습 니 다.이렇게 synchronized 된 코드 의 성능 은 떨 어 지지 만 스 레 드 안전 의 목적 을 달성 할 것 입 니 다.
B 가지 단일 모드 의 쓰기 방법 은 주로 스 레 드 안전 을 해결 하기 위해 서 입 니 다.변체 가 매우 많 고 변체 의 목적 은 주로 스 레 드 의 안전 한 조작 성 을 어떻게 강화 하 는 지 에 집중 된다.지금 예 를 들 면 다음 과 같다. 예 를 들 면:
B 종 서법 의 증강 형 변형 (라인 보안 서법 2):
package singleton;
public class SingletonInstance {
// !volatile , volatile 。
// volatile 。
private static volatile SingletonInstance mSingletonInstance = null;
// private, new SingletonInstance()。
private SingletonInstance() {
}
public static SingletonInstance getInstance() {
if (mSingletonInstance == null) {
// synchronized (SingletonInstance.class) , 。
// synchronized (this) , static , this, XXXClass.class
// synchronized : ( ), 、 , , 。
// , synchronized,
synchronized (SingletonInstance.class) {
if (mSingletonInstance == null)
mSingletonInstance = new SingletonInstance();
}
}
return mSingletonInstance;
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
디자인 모델 의 공장 모델, 단일 모델자바 는 23 가지 디자인 모델 (프로 그래 밍 사상/프로 그래 밍 방식) 이 있 습 니 다. 공장 모드 하나의 공장 류 를 만들어 같은 인 터 페 이 스 를 실현 한 일부 종 류 를 인 스 턴 스 로 만 드 는 것...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.