單例模式

1. 雙重檢查加鎖

package com.handaer.util;

public class Singleton {
    /**
     * 對保存的實例的變量添加volatile的修飾
     * 
     * */

    private volatile static Singleton instance = null;

    private Singleton () {

    }

    public static Singleton getInstance() {

        // 先檢查實列是否存在,如果不存在才進入下面的同步快;
        if (instance == null) {
            // 同步塊,線程安全地創建實例
            synchronized (Singleton.class) {
                // 再次檢查,如果不存在,才真正創建實例
                if (instance == null) {
                    instance = new Singleton();
                }
            }
        }
        return instance;

    }
}

 

 

2. java中更好的一種單例模式實現

public class Singleton {
 /**
  * 類級的內部類,也就是靜態的成員式內部類,該類的實例與外部類的實例
  * 沒有綁定關係,而且只有被調用的時候纔會裝載,從而實現延遲加載
  * */
    private static class SingletonHolder {
        private static Singleton instance = new Singleton();
    }

    /**
     * */
    private Singleton() {}

    public static Singleton getInstance() {
        return SingletonHolder.instance;
    }
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章