單件模式(單例模式)
阿新 • • 發佈:2021-07-06
單件模式,又稱單例模式
/** * 單例,版本一,此版本多執行緒下有問題。不要使用 */ public class Singleton00 { private Singleton00() { } private static Singleton00 uniqueInstance; public static Singleton00 getInstance() { if(null == uniqueInstance) { uniqueInstance = new Singleton00(); } return uniqueInstance; } }/** * 單例,版本2,加鎖,同步這個方法,效率低 */ public class Singleton01 { private Singleton01() { } private static Singleton01 uniqueInstance; public static synchronized Singleton01 getInstance() { if(null == uniqueInstance) { uniqueInstance = new Singleton01(); } returnuniqueInstance; } } /** * 單例,版本3,急切版,餓漢版,多執行緒下沒有問題。 * JVM在載入這個類時,馬上就建立 uniqueInstance,保證了執行緒安全。thread safe。 */ public class Singleton02 { private Singleton02() { } private static Singleton02 uniqueInstance = new Singleton02(); public static Singleton02 getInstance() { returnuniqueInstance; } } /** * 單例,版本4,雙重檢查加鎖,double-checked locking。版本2的改進,效率高。 */ public class Singleton03 { private Singleton03() { } //volatile 關鍵字確保:當uniqueInstance變數被初始化成例項時,多執行緒的uniqueInstance同時改變。 private volatile static Singleton03 uniqueInstance; public static Singleton03 getInstance() { if(null == uniqueInstance) { synchronized(Singleton03.class) { if(null == uniqueInstance) { uniqueInstance = new Singleton03(); } } } return uniqueInstance; } }
常記溪亭日暮,沉醉不知歸路。興盡晚回舟,誤入藕花深處。爭渡,爭渡,驚起一灘鷗鷺。
昨夜雨疏風驟,濃睡不消殘酒。試問卷簾人,卻道海棠依舊。知否?知否?應是綠肥紅瘦。