Java單例模式的實現

1、懶漢式,線程安全

public class Singleton {

	private static Singleton instance;
	public Singleton() {
		// TODO Auto-generated constructor stub
	}
	public static synchronized Singleton getInstance(){
		if (instance == null) {
			instance = new Singleton();
		}
		return instance;
	}
}

2、餓漢式

public class Singleton {

	private static final Singleton instance = new Singleton();
	public Singleton() {
		// TODO Auto-generated constructor stub
	}
	public static Singleton getInstance(){
		return instance;
	}
}


3、雙重檢驗鎖

public class Singleton {

	private static volatile Singleton instance;//加上volatile取消jvm的重排序優化
	public Singleton() {
		// TODO Auto-generated constructor stub
	}
	public static Singleton getInstance(){
		if (instance == null) {                 //第一次檢驗
			synchronized (Singleton.class) {
				if (instance == null) {         //第二次檢驗
					instance = new Singleton();
				}
			}
		}
		return instance;
	}
}

4、內部靜態類

public class Singleton {

	private static class SingletonHolder{
		private static final Singleton INSTANCE = new Singleton();
	}
	public Singleton() {
		// TODO Auto-generated constructor stub
	}
	public static Singleton getInstance(){
		return SingletonHolder.INSTANCE;
	}
}

5、枚舉類

public enum Singleton {

	INSTANCE;
}


參考博客:

http://wuchong.me/blog/2014/08/28/how-to-correctly-write-singleton-pattern/

http://javarevisited.blogspot.sg/2014/05/double-checked-locking-on-singleton-in-java.html

http://javarevisited.blogspot.sg/2012/07/why-enum-singleton-are-better-in-java.html

發佈了82 篇原創文章 · 獲贊 100 · 訪問量 48萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章