1. 程式人生 > >Java單利模式之飽漢模式淺談

Java單利模式之飽漢模式淺談

public class SingleInstance {

public SingleInstance() {
}
//飽漢模式之執行緒安全和效率討論

/**
 * 效率低,每次進來都要同步,儘管例項不為空了
 * @return
 */
public static synchronized SingleInstance getInstance() {
    if (instance == null) {
        instance = new SingleInstance();
    }
    return instance;
}


/**
 * DCL單利模式,比上一個方法提高了效率,但是執行緒不是絕對安全
 * @return

public static SingleInstance instance;
public static SingleInstance getDCLinstance() {
    if (instance == null) {
        synchronized (SingleInstance.class) {
            //DCL 雙重校驗,但是高併發中可能偶發指令集亂序問題
            if (instance == null) {
                instance = new SingleInstance();
            }
        }
    }
    return instance;
}
 */

//volatile在JDK1.5之後退出,防止指令集亂序
public  volatile static SingleInstance instance;
public static SingleInstance getDCLinstance() {
    if (instance == null) {
        synchronized (SingleInstance.class) {
            //DCL 雙重校驗,但是高併發中可能偶發指令集亂序問題
            if (instance == null) {
                instance = new SingleInstance();
            }
        }
    }
    return instance;
}

注意:當然也可以通過列舉來單例,因為列舉的建構函式是私有的

}