国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

singleton 單例模式

DirtyMind / 1490人閱讀

摘要:單例模式單例模式是中最常用的設(shè)計(jì)模式,也是面試中經(jīng)常考察的。因?yàn)轭惣虞d的時(shí)候是單線程,保證單例和線程安全。生成了一個(gè)實(shí)例延遲初始化實(shí)例,但是為了保證線程安全,需要加鎖。

singleton 單例模式

單例模式是Java 中最常用的設(shè)計(jì)模式,也是面試中經(jīng)常考察的。

標(biāo)準(zhǔn)版本

<圖解設(shè)計(jì)模式> 書本上的示例代碼,在class內(nèi)有一個(gè)靜態(tài)的變量直接賦值,在類加載的時(shí)候就初始化。缺點(diǎn)是有點(diǎn)浪費(fèi)內(nèi)存。因?yàn)轭惣虞d的時(shí)候是單線程,保證單例和線程安全。

public class Singleton1 {
      private static Singleton1 singleton1 = new Singleton1();
      private Singleton1() {
            System.out.println("生成了一個(gè)實(shí)例.");
      }
      public static Singleton1 getInstance() {
            return singleton1;
      }
}
synchronized

延遲初始化實(shí)例,但是為了保證線程安全,getInstance需要加鎖。

public class Singleton2 {
      private static Singleton2 singleton2 = null;
      private Singleton2() {
            System.out.println("生成了一個(gè)實(shí)例.");
      }
      public static synchronized Singleton2 getInstance() {
            if (singleton2 == null){
                  singleton2 = new Singleton2();
            }
            return singleton2;
      }
}
雙重校驗(yàn)

在方法上加鎖synchronized,效率比較低,為了提高效率在getInstance方法內(nèi)部加鎖。鎖住的代碼范圍越小,所等待的時(shí)間越少。

public class Singleton3 {
    private static Singleton3 instance = null;
    private Singleton3() {
        System.out.println("生成了一個(gè)實(shí)例.");
    }
    public static Singleton3 getInstance() {
        if (instance == null){
            synchronized (Singleton3.class){
                if (instance == null) {
                    instance = new Singleton3();
                }
            }
        }
        return instance;
    }
}
利用靜態(tài)內(nèi)部類

這種方式同樣利用了 classloder 機(jī)制來保證初始化 instance 時(shí)只有一個(gè)線程,它跟標(biāo)準(zhǔn)版本不同的是:標(biāo)準(zhǔn)版本只要 Singleton 類被裝載了,那么 instance 就會(huì)被實(shí)例化(沒有達(dá)到 lazy loading 效果),而這種方式是 Singleton 類被裝載了,instance 不一定被初始化。因?yàn)?SingletonHolder 類沒有被主動(dòng)使用,只有顯示通過調(diào)用 getInstance 方法時(shí),才會(huì)顯示裝載 SingletonHolder 類,從而實(shí)例化 instance。想象一下,如果實(shí)例化 instance 很消耗資源,所以想讓它延遲加載,另外一方面,又不希望在 Singleton 類加載時(shí)就實(shí)例化,因?yàn)椴荒艽_保 Singleton 類還可能在其他的地方被主動(dòng)使用從而被加載,那么這個(gè)時(shí)候?qū)嵗?instance 顯然是不合適的。這個(gè)時(shí)候,這種方式相比標(biāo)準(zhǔn)版本就顯得很合理。

public class Singleton4 {
    private static class SingletonHolder {
        private static final Singleton4 INSTANCE = new Singleton4();
    }
    private Singleton4 (){}
    public static final Singleton4 getInstance() {
        return SingletonHolder.INSTANCE;
    }
}

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/67216.html

相關(guān)文章

  • Java設(shè)計(jì)模式-單例模式Singleton Pattern)

    摘要:如果需要防范這種攻擊,請修改構(gòu)造函數(shù),使其在被要求創(chuàng)建第二個(gè)實(shí)例時(shí)拋出異常。單例模式與單一職責(zé)原則有沖突。源碼地址參考文獻(xiàn)設(shè)計(jì)模式之禪 定義 單例模式是一個(gè)比較簡單的模式,其定義如下: 保證一個(gè)類僅有一個(gè)實(shí)例,并提供一個(gè)訪問它的全局訪問點(diǎn)。 或者 Ensure a class has only one instance, and provide a global point of ac...

    k00baa 評(píng)論0 收藏0
  • Java 設(shè)計(jì)模式單例模式

    摘要:在設(shè)計(jì)模式一書中,將單例模式稱作單件模式。通過關(guān)鍵字,來保證不會(huì)同時(shí)有兩個(gè)線程進(jìn)入該方法的實(shí)例對象改善多線程問題為了符合大多數(shù)程序,很明顯地,我們需要確保單例模式能在多線程的情況下正常工作。 在《Head First 設(shè)計(jì)模式》一書中,將單例模式稱作單件模式。這里為了適應(yīng)大環(huán)境,把它稱之為大家更熟悉的單例模式。 一、了解單例模式 1.1 什么是單例模式 單例模式確保一個(gè)類只有一個(gè)實(shí)例,...

    everfight 評(píng)論0 收藏0
  • Android中的設(shè)計(jì)模式單例模式

    摘要:總結(jié)單例是運(yùn)用頻率很高的模式,因?yàn)榭蛻舳藳]有高并發(fā)的情況,選擇哪種方式并不會(huì)有太大的影響,出于效率考慮,推薦使用和靜態(tài)內(nèi)部類實(shí)現(xiàn)單例模式。 單例模式介紹 單例模式是應(yīng)用最廣的模式之一,也可能是很多人唯一會(huì)使用的設(shè)計(jì)模式。在應(yīng)用單例模式時(shí),單例對象的類必須保證只用一個(gè)實(shí)例存在。許多時(shí)候整個(gè)系統(tǒng)只需要一個(gè)全局對象,這樣有利于我么能協(xié)調(diào)整個(gè)系統(tǒng)整體的行為。 單例模式的使用場景 確保某個(gè)類有且...

    yzd 評(píng)論0 收藏0
  • 設(shè)計(jì)模式--單例模式

    摘要:雙重檢查鎖單例模式懶漢單例模式中,我們并不需要整個(gè)方法都是同步的,我們只需要確保再創(chuàng)建的時(shí)候,進(jìn)行同步即可。單例模式的缺點(diǎn)優(yōu)點(diǎn)在開頭已經(jīng)說明了,單例模式的缺點(diǎn)在于它一般沒有接口,擴(kuò)展困難,基本上修改源代碼是擴(kuò)展單例模式的唯一方法。 單例模式 定義: 確保某一個(gè)類只有一個(gè)實(shí)例對象,并且該對象是自行實(shí)例化的,通過統(tǒng)一的接口向整個(gè)系統(tǒng)提供這個(gè)實(shí)例對象。 使用場景: 避免產(chǎn)生多個(gè)對象消耗過多的...

    luxixing 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

DirtyMind

|高級(jí)講師

TA的文章

閱讀更多
最新活動(dòng)
閱讀需要支付1元查看
<