新手談設計模式 - 單例模式

單例模式 不少都會寫 面試的時候也常常問 因而乎順手就寫了一個面試

public class Singleton {
	private static Singleton singleton = new Singleton();
	private Singleton(){}
	public static Singleton getSingleton(){
		return singleton;
	}
}

因爲這種啓動加載,爲了減少負載須要延遲加載 因而有了安全

public class Singleton {
	private static Singleton singleton = null;
	private Singleton(){}
	public static Singleton getSingleton(){
		if(singleton == null)
			singleton = new Singleton();
		return singleton;
	}
}

確實延遲加載了 但若是多線程的話 是否是可能出現多個了呢多線程

因而咱們考慮線程安全 進行加鎖框架

public class Singleton {
	private static Singleton singleton = null;

	private Singleton() {
	}

	public static Singleton getSingleton() {
		synchronized (Singleton.class) {

			if (singleton == null)
				singleton = new Singleton();
		}
		return singleton;
	}

}

但這樣一想每次都要來進行鎖判斷 而單例一旦建立了後面就存在了不用進null判斷了  這樣效率是否是還能夠提升一點線程

public class Singleton {
	private static Singleton singleton = null;

	private Singleton() {
	}

	public static Singleton getSingleton() {
		if (singleton == null)
			synchronized (Singleton.class) {

				if (singleton == null)
					singleton = new Singleton();
			}
		return singleton;
	}

}

原來單例也不簡單啊,雖然如今本身手寫很少 不少都用框架來代替了但本身設計一些底層編寫時仍是會用到設計

相關文章
相關標籤/搜索