真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

java單例模式的實(shí)現(xiàn)方式以及差異

惡漢單例模式:
/**

創(chuàng)新互聯(lián)公司從2013年創(chuàng)立,先為樺甸等服務(wù)建站,樺甸等地企業(yè),進(jìn)行企業(yè)商務(wù)咨詢服務(wù)。為樺甸企業(yè)網(wǎng)站制作PC+手機(jī)+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問(wèn)題。

  • 惡漢單例模式,用空間換時(shí)間的思想進(jìn)行對(duì)象的初始化,在多線程的情況下,故不存在線程安全問(wèn)題。

    • @author Administrator
    • */
      public class WickedManSingleTon {

    private static WickedManSingleTon instance=new WickedManSingleTon();

    private WickedManSingleTon() {

    }

    public static WickedManSingleTon getIntance() {
    return instance;
    }

}

懶漢模式:

/**

  • 懶漢單例模式,用時(shí)間換空間的概念,實(shí)例化單例對(duì)象,在多線程的情況下,存在線程安全的問(wèn)題。

    • @author Administrator
    • */
      public class LasyManSingleTon {

    private static LasyManSingleTon instance=null;

    private LasyManSingleTon() {

    }

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

}

/**

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

    private DCLInstance() {

    }

    public static DCLInstance getInstance() {

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

    }

}

/**

  • @author Administrator
  • 內(nèi)部類的形式實(shí)現(xiàn)單例模式:
  • 靜態(tài)內(nèi)部類的優(yōu)點(diǎn)是:外部類加載時(shí)并不需要立即加載內(nèi)部類,內(nèi)部類不被加載則不去初始化INSTANCE,故而不占內(nèi)存。
  • 即當(dāng)SingleTon第一次被加載時(shí),并不需要去加載SingleTonHoler,只有當(dāng)getInstance()方法第一次被調(diào)用時(shí),
  • 才會(huì)去初始化INSTANCE,第一次調(diào)用getInstance()方法會(huì)導(dǎo)致虛擬機(jī)加載SingleTonHoler類,
  • 這種方法不僅能確保線程安全,也能保證單例的唯一性,同時(shí)也延遲了單例的實(shí)例化。
  • */
    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();
    }
    }


分享名稱:java單例模式的實(shí)現(xiàn)方式以及差異
當(dāng)前路徑:http://weahome.cn/article/ghjpgd.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部