1. 程式人生 > 其它 >單件模式(單例模式)

單件模式(單例模式)

單件模式,又稱單例模式

/**
 * 單例,版本一,此版本多執行緒下有問題。不要使用
 */
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(); } return
uniqueInstance; } } /** * 單例,版本3,急切版,餓漢版,多執行緒下沒有問題。 * JVM在載入這個類時,馬上就建立 uniqueInstance,保證了執行緒安全。thread safe。 */ public class Singleton02 { private Singleton02() { } private static Singleton02 uniqueInstance = new Singleton02(); public static Singleton02 getInstance() { return
uniqueInstance; } } /** * 單例,版本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; } }

常記溪亭日暮,沉醉不知歸路。興盡晚回舟,誤入藕花深處。爭渡,爭渡,驚起一灘鷗鷺。

昨夜雨疏風驟,濃睡不消殘酒。試問卷簾人,卻道海棠依舊。知否?知否?應是綠肥紅瘦。