3. 단일 패턴의 다양한 쓰기
2009 단어 Android
private static Singleton uniqueInstance = new Singleton();
private static Singleton uniqueInstance = null;
어떻게 게으름뱅이식의 라인 안전을 실현합니까?
Synchronized를 추가하면 됩니다.
public static synchronized Singleton getInstance(){}
그러나 이렇게 하면 전체 방문 속도가 떨어지고 매번 판단해야 한다.이중 검사로 자물쇠를 채울 수 있습니다.
이중 잠금 메커니즘은 getInstance에 들어갈 때마다 동기화가 필요한 것이 아니라 동기화가 안 되는 것이다. 방법에 들어간 후에 실례가 존재하는지 확인하고 존재하지 않으면 아래의 동기화 블록에 들어가는 것이 첫 번째 재검사이다.블록을 동기화한 후 인스턴스가 있는지 다시 확인하고 그렇지 않으면 동기화된 상태에서 인스턴스를 생성합니다.이것은 두 번째 검사다.
이중 잠금 메커니즘의 실현은 키워드volatile를 사용합니다. 이것은 volatile에 의해 수식된 변수의 값이 로컬 루트에 캐시되지 않고, 이 변수에 대한 읽기와 쓰기는 공유 메모리를 직접 조작하여 여러 루트가 이 변수를 정확하게 처리할 수 있도록 한다는 뜻입니다.
/**
*
* @author dream
*
*/
public class Singleton {
/**
* volitile
*/
private volatile static Singleton instance = null;
private Singleton(){
}
public static Singleton getInstance(){
// ,
if(instance == null){
// ,
synchronized (Singleton.class) {
// ,
instance = new Singleton();
}
}
return instance;
}
}
더욱 좋은 단일 실현 방식
public class Singleton {
/**
* , ,
* , ,
* @author dream
*
*/
private static class SingletonHolder{
/**
* , JVM
*/
private static final Singleton instance = new Singleton();
}
/**
*
*/
private Singleton(){
}
public static Singleton getInstance(){
return SingletonHolder.instance;
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Bitrise에서 배포 어플리케이션 설정 테스트하기이 글은 Bitrise 광고 달력의 23일째 글입니다. 자체 또는 당사 등에서 Bitrise 구축 서비스를 사용합니다. 그나저나 며칠 전 Bitrise User Group Meetup #3에서 아래 슬라이드를 발표했...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.