Java面試手寫代碼No.3(Singleton)

Java設計模式——單例模式(第3種爲最終模式)

拋磚引玉 一:懶漢模式

/*
 * 問題域:設計一個能且只能產生一個對象的類
 */
//單列模式一------懶漢模式
/*
 * 1、它是一種預加載的實現。不管代碼中有沒有用到getInstance,都會被產生;
 * 2、線程絕對安全的
 */
public class Singleton {
	
	private static Singleton sin = new Singleton();
	
	private Singleton(){
		
	}
	
	public static Singleton getInstance(){
		return sin;
	}

}
拋磚引玉 二:餓漢模式

//單列模式二-----餓漢模式
/*
 * 1、延遲加載實現,只有在真正需要Singleton對象的時候才產生
 * 2、不加同步,線程不安全;加同步,效率低
 */
public class Singleton {
	
	private static Singleton sin;
	
	private Singleton(){
		
	}
	
	public synchronized static Singleton getInstance(){
		if(sin == null){
			sin = new Singleton();
		}
		return sin;
	}
}
最終的--模式:單例模式  之雙鎖機制

//單列模式三---雙鎖機制
//既支持延遲加載,又支持線程安全的高併發
public class Singleton {
	
	private static Singleton sin;
	
	private Singleton(){
		
	}
	
	public static Singleton getInstance(){		
		if(sin == null){			
			synchronized(Singleton.class){				
				if(sin == null){
					sin = new Singleton();
					
				}
			}
		}
		return sin;
	}
	
}




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章