1. 程式人生 > >設計模式Singleton Pattern

設計模式Singleton Pattern

package singleton;
/**
 * 指令重排序
 * 優化指令,提高程式執行效率。
 * 例如:
 * 分配物件的記憶體空間、 初始化物件、設定instance指向剛分配的記憶體地址
 * 後兩個可能互換,在多執行緒下會導致得到未被完全初始化的例項
 *
 */
public class Singleton {
    //1.5 後volatile變數禁止指令重排序
    private static volatile Singleton singleton;
    private Singleton(){}
    //延遲初始化;在方法上加sync會影響效能,只在初始化的時候同步,雙重檢查加鎖(DCL)
    public static Singleton getSingleton(){
        if(singleton==null){
            synchronized (Singleton.class) {
                if(singleton==null)
                    singleton = new Singleton();
            }
        }
        return singleton;
    }
}