91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

java單例模式的實現方式以及差異

發布時間:2020-07-13 07:06:28 來源:網絡 閱讀:212 作者:wx599293dcbb7d7 欄目:編程語言

惡漢單例模式:
/**

  • 惡漢單例模式,用空間換時間的思想進行對象的初始化,在多線程的情況下,故不存在線程安全問題。

    • @author Administrator
    • */
      public class WickedManSingleTon {

    private static WickedManSingleTon instance=new WickedManSingleTon();

    private WickedManSingleTon() {

    }

    public static WickedManSingleTon getIntance() {
    return instance;
    }

}

懶漢模式:

/**

  • 懶漢單例模式,用時間換空間的概念,實例化單例對象,在多線程的情況下,存在線程安全的問題。

    • @author Administrator
    • */
      public class LasyManSingleTon {

    private static LasyManSingleTon instance=null;

    private LasyManSingleTon() {

    }

    public static LasyManSingleTon getInstance() {
    if(instance==null) {
    instance=new LasyManSingleTon();
    }
    return instance;
    }

}

/**

  • 雙檢索實現單例模式
  • @author Administrator DCL模式的優點就是,只有在對象需要被使用時才創建,第一次判斷 INSTANCE ==
  • null為了避免非必要加鎖,當第一次加載時才對實例進行加鎖再實例化。這樣既可以節約內存空間,又可以保證線程安全。但是,由于jvm存在亂序執行功能,DCL也會出現線程不安全的情況。具體分析如下:
  • INSTANCE = new DCLInstance();
  • 這個步驟,其實在jvm里面的執行分為三步: ??
  • 1.在堆內存開辟內存空間。 ?
  • 2.在堆內存中實例化SingleTon里面的各個參數。 ?
  • 3.把對象指向堆內存空間。
  • 由于jvm存在亂序執行功能,所以可能在2還沒執行時就先執行了3,如果此時再被切換到線程B上,由于執行了3,INSTANCE
  • 已經非空了,會被直接拿出來用,這樣的話,就會出現異常。這個就是著名的DCL失效問題。
    */
    public class DCLInstance {
    // 手寫雙檢索
    private static DCLInstance instance = null;//優化采用volatile

    private DCLInstance() {

    }

    public static DCLInstance getInstance() {

    if (instance == null) {
        // 同步操作
        synchronized (DCLInstance.class) {
            if (instance == null) {
                // 多線程環境下可能會出現問題的地方
                instance = new DCLInstance();
            }
        }
    }
    return instance;

    }

}

/**

  • @author Administrator
  • 內部類的形式實現單例模式:
  • 靜態內部類的優點是:外部類加載時并不需要立即加載內部類,內部類不被加載則不去初始化INSTANCE,故而不占內存。
  • 即當SingleTon第一次被加載時,并不需要去加載SingleTonHoler,只有當getInstance()方法第一次被調用時,
  • 才會去初始化INSTANCE,第一次調用getInstance()方法會導致虛擬機加載SingleTonHoler類,
  • 這種方法不僅能確保線程安全,也能保證單例的唯一性,同時也延遲了單例的實例化。
  • */
    public class InerClassMakeIntance {

    private static InerClassMakeIntance instance =null;

    private InerClassMakeIntance() {

    }

    public static InerClassMakeIntance getInstance() {
    return InerInstance.t1;
    }

    private static class InerInstance {
    private static InerClassMakeIntance t1 = new InerClassMakeIntance();
    }
    }

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

东明县| 凤庆县| 桃江县| 烟台市| 从江县| 布尔津县| 延寿县| 新泰市| 县级市| 台前县| 怀集县| 曲麻莱县| 东光县| 米林县| 茶陵县| 思茅市| 云安县| 吉安县| 类乌齐县| 乐都县| 陇南市| 河津市| 武宣县| 开阳县| 青铜峡市| 东辽县| 东莞市| 纳雍县| 项城市| 阳春市| 平顺县| 漠河县| 三门县| 昭通市| 兴山县| 万山特区| 济南市| 云和县| 房山区| 海南省| 常州市|