단일 모드 스레드 보안

1641 단어 단일 모드
라인 보안 문제: 이것은 단일 대상을 얻을 때의 문제를 가리키며, 대상이 자원을 공유할 때의 문제가 아니다.
 
이중 잠금:'2차 판단'은 모든 라인이 이 방법을 실행하기 전에 잠금을 받을 때까지 기다리지 않습니다.
동기화하지 않으면, 여러 라인이 여러 개의 대상을 만들고, 그 다음은 앞의 것을 덮어씁니다. 
if(instance==null) { instance=new Singleton(); }
    private Singleton(){}
	private volatile static Singleton instance = null;
	public static Singleton getInstance() {
		if (instance == null) {
                    //synchronized (this)   
	             synchronized (Singleton.class) {
				if (instance == null) {
					instance = new Singleton();
				}
			}
		}
		
		return instance;
	} 

 
 
클래스를 불러올 때 대상을 초기화합니다: 불러오는 것을 지연시킬 수 없습니다. (대상이 크면 공간 낭비입니다.) 클래스를 초기화할 때 불러오는 장면에 적합합니다.
public class Singleton { 

private Singleton(){ 
  
} 
// final, 。 , instance 。
private static Singleton instance =new Singleton(); 
public static Singleton getInstance(){ 
      return instance; 
} 

} 

  
 
static 내부 클래스, 마운트 지연, 가상 기기 동기화 메커니즘 사용,synchronized 필요 없음
 
public class Singleton    
{    
    private static class SingletonHolder    
    {    
        public final static Singleton instance = new Singleton();    
    }    
   
    public static Singleton getInstance()    
    {    
        return SingletonHolder.instance;    
    }    
}  

 
 
 

좋은 웹페이지 즐겨찾기