設計模式Singleton Pattern
阿新 • • 發佈:2019-02-14
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;
}
}