国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

單例模式(懶漢式和餓漢式)

這篇具有很好參考價(jià)值的文章主要介紹了單例模式(懶漢式和餓漢式)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

概念

單例模式是指保證某個(gè)類在整個(gè)軟件系統(tǒng)中只有一個(gè)對(duì)象實(shí)例,并且該類僅提供一個(gè)返回其對(duì)象實(shí)例,由于單例模式在內(nèi)存中只有一個(gè)實(shí)例,減少了內(nèi)存開支,特別是一個(gè)對(duì)象需要頻繁地創(chuàng)建、銷毀時(shí),而且創(chuàng)建或銷毀時(shí)性能又無(wú)法優(yōu)化,單例模式的優(yōu)勢(shì)就非常明顯。

在計(jì)算機(jī)系統(tǒng)中,線程池、緩存、日志對(duì)象、對(duì)話框、打印機(jī)、顯卡的驅(qū)動(dòng)程序?qū)ο蟪1辉O(shè)計(jì)成單例。選擇單例模式是為了避免不一致狀態(tài)。

單例常見方式

餓漢式(線程安全)

餓漢就是類一旦加載,單例初始化就開始,保證在調(diào)用getInstance()方法時(shí),單例是已經(jīng)存在的了,以后不再改變,所以是線程安全的。
缺點(diǎn):當(dāng)類裝載的時(shí)候就會(huì)創(chuàng)建類的實(shí)例,不管你用不用,都會(huì)先創(chuàng)建出來(lái),無(wú)法做到延遲創(chuàng)建對(duì)象,從而降低內(nèi)存的使用率。

/*
餓漢單例模式設(shè)計(jì):
①使用private修飾構(gòu)造函數(shù),限制了外部創(chuàng)建該類對(duì)象
②創(chuàng)建一個(gè)靜態(tài)的對(duì)象,在類初始化時(shí),已經(jīng)自行實(shí)例化。
③聲明一個(gè)getInstance方法來(lái)返回該靜態(tài)對(duì)象
*/
public class SingletonPattern {
  private static final SingletonPattern single=new SingletonPattern();
  private SingletonPattern(){}
  static public SingletonPattern getInstance(){
  return single;
   }
}

懶漢式(線程不安全)

懶漢模式中,在第一次調(diào)用的時(shí)候?qū)嵗约海簿褪钦f只有當(dāng)調(diào)用getInstance()的時(shí)候,并且判斷 instance為null時(shí)才創(chuàng)建一個(gè)實(shí)例。被動(dòng)地創(chuàng)建實(shí)例。

/*設(shè)計(jì):
①構(gòu)造函數(shù)私有,避免外部創(chuàng)建對(duì)象(但是Java反射機(jī)制是能夠?qū)嵗瘶?gòu)造方法為private的類的,會(huì)使Java單例實(shí)現(xiàn)失效)
②聲明當(dāng)前類的引用,此時(shí)不能對(duì)引用進(jìn)行實(shí)例化
③聲明getInstance()方法,懶漢式單例的實(shí)現(xiàn)沒有考慮線程安全問題,	它是線程不安全的,并發(fā)環(huán)境下可能出現(xiàn)多個(gè)實(shí)例,要保證線程安全,可以使用 synchronized將方法聲明為同步方法,雙重檢查鎖定,或者靜態(tài)內(nèi)部類,根據(jù)當(dāng)前對(duì)象判斷是否為null來(lái)創(chuàng)建對(duì)象。
*/

線程不安全的懶漢式

public class SingletonPattern2 {
    private static SingletonPattern2 singe=null;
    private SingletonPattern2(){}
    public  static SingletonPattern2 getInstance(){
       if (singe==null){
           singe=new SingletonPattern2();
       }
        return singe;
    }
}

線程安全的懶漢式

1、在getInstance方法上加同步

public class SingletonPattern2 {
    private static SingletonPattern2 singe=null;
    private SingletonPattern2(){}
    public synchronized static SingletonPattern2 getInstance(){
       if (singe==null){
           singe=new SingletonPattern2();
       }
        return singe;
    }
}

2、雙重檢查鎖定

public class SingletonPattern2 {
    private static SingletonPattern2 singe=null;
    private SingletonPattern2(){}
    public synchronized static SingletonPattern2 getInstance(){
        if (singe==null){
            synchronized (SingletonPattern2.class){
                if (singe==null){
                    singe=new SingletonPattern2();
                }
            }
        }
        return singe;
    }
}

3、靜態(tài)內(nèi)部類

public class SingletonPattern2 {
    private SingletonPattern2(){}
    public static class LazyHolder{
        private static SingletonPattern2 singe=new SingletonPattern2();
    }
    public  static SingletonPattern2 getInstance() {
        return LazyHolder.singe;
    }
}

測(cè)試

public class Test {
public static void main(String[] args) {
//餓漢式(線程安全)
SingletonPattern instance =SingletonPattern.getInstance();
SingletonPattern instance2 =SingletonPattern.getInstance();
//判斷是否是一個(gè)對(duì)象實(shí)例
System.out.println(instance==instance2);//true

//懶漢式(線程不安全)
SingletonPattern2 instance3 =SingletonPattern2.getInstance();
SingletonPattern2 instance4 =SingletonPattern2.getInstance();
//判斷是否是一個(gè)對(duì)象實(shí)例
System.out.println(instance3==instance4);//true
  }
}

懶漢式和餓漢式區(qū)別

餓漢式天生就是線程安全的,可以直接用于多線程而不會(huì)出現(xiàn)問題,

懶漢式本身是非線程安全的,為了實(shí)現(xiàn)線程安全有以上幾種寫法。

懶漢模式和餓漢模式的實(shí)例創(chuàng)建的時(shí)機(jī)不同;

單例模式的應(yīng)用場(chǎng)景

某類只要求生成一個(gè)對(duì)象的時(shí)候,如一個(gè)班中的班主任。

單例模式為一個(gè)面向?qū)ο蟮膽?yīng)用程序提供對(duì)象惟一的訪問點(diǎn),整個(gè)應(yīng)用程序同享一個(gè)實(shí)例對(duì)象。

某類需要頻繁實(shí)例化,而創(chuàng)建的對(duì)象又頻繁被銷毀的時(shí)候,如多線程的線程池文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-548879.html

到了這里,關(guān)于單例模式(懶漢式和餓漢式)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【多線程案例】單例模式(懶漢模式和餓漢模式)

    【多線程案例】單例模式(懶漢模式和餓漢模式)

    提起單例模式,就必須介紹設(shè)計(jì)模式,而設(shè)計(jì)模式就是在軟件設(shè)計(jì)中,針對(duì)特殊問題提出的解決方案。它是多年來(lái)針對(duì)一些常見的問題的解決方法,具有良好的可復(fù)用性、可擴(kuò)展性和可維護(hù)性。 標(biāo)準(zhǔn)的設(shè)計(jì)模式有23種,單例模式就是最常見的一種,其目的是確認(rèn)一個(gè)類只有一

    2024年02月10日
    瀏覽(19)
  • 單例模式(餓漢式單例 VS 懶漢式單例)

    單例模式(餓漢式單例 VS 懶漢式單例)

    所謂的單例模式就是保證某個(gè)類在程序中只有一個(gè)對(duì)象 1.構(gòu)造方法私有化(保證對(duì)象的產(chǎn)生個(gè)數(shù)) ? ? ? ? 創(chuàng)建類的對(duì)象,要通過構(gòu)造方法產(chǎn)生對(duì)象 ? ? ? ?構(gòu)造方法若是public權(quán)限,對(duì)于類的外部,可以隨意創(chuàng)建對(duì)象,無(wú)法控制對(duì)象個(gè)數(shù) ? ? ? 構(gòu)造方法私有化,這樣類的外

    2024年02月09日
    瀏覽(22)
  • 設(shè)計(jì)模式第一課-單例模式(懶漢模式和餓漢模式)

    設(shè)計(jì)模式第一課-單例模式(懶漢模式和餓漢模式)

    個(gè)人理解:?jiǎn)卫J綄?shí)際就是通過類加載的方式獲取到一個(gè)對(duì)象,并且保證這個(gè)對(duì)象在使用中只有一個(gè),不允許再次被創(chuàng)建 1、懶漢模式的基礎(chǔ)寫法 代碼解釋: (1)、編寫LazySingleton類的時(shí)候,需要將成員屬性設(shè)定為static,這樣才會(huì)是類屬性 (2)、重寫構(gòu)造方法,將其設(shè)置

    2024年02月05日
    瀏覽(23)
  • 【單例模式】餓漢式、懶漢式、靜態(tài)內(nèi)部類--簡(jiǎn)單例子

    【單例模式】餓漢式、懶漢式、靜態(tài)內(nèi)部類--簡(jiǎn)單例子

    單例模式是?個(gè)單例類在任何情況下都只存在?個(gè)實(shí)例,構(gòu)造?法必須是私有的、由??創(chuàng)建?個(gè)靜態(tài)變量存儲(chǔ)實(shí)例,對(duì)外提供?個(gè)靜態(tài)公有?法獲取實(shí)例。 目錄 一、單例模式 餓漢式 ?靜態(tài)內(nèi)部類 懶漢式 反射可以破壞單例 道高一尺魔高一丈 枚舉 類?加載就創(chuàng)建對(duì)象,這

    2024年04月23日
    瀏覽(25)
  • 24種設(shè)計(jì)模式之單例模式(餓漢式、懶漢式)

    24種設(shè)計(jì)模式之單例模式(餓漢式、懶漢式)

    單例模式( Singleton Pattern )是指確保一個(gè)類在任何情況下都絕對(duì)只有一個(gè)實(shí)例,并提供一個(gè)全局訪問點(diǎn)。單例模式是創(chuàng)建型模式。單例模式在現(xiàn)實(shí)生活中應(yīng)用也非常廣泛,例如,總統(tǒng),班主任等。J2EE標(biāo)準(zhǔn)中的ServletContext 、ServletContextConfig 等、Spring框架應(yīng)用中的。 特點(diǎn):構(gòu)造方

    2024年02月07日
    瀏覽(24)
  • Java中單例(單態(tài)、原子)設(shè)計(jì)模式(餓漢式/懶漢式)

    先看文章目錄,大致了解知識(shí)點(diǎn)結(jié)構(gòu),直接點(diǎn)擊文章目錄可以跳轉(zhuǎn)到文章指定位置。 設(shè)計(jì)模式就是設(shè)計(jì)出來(lái)的固定問題的解決方法,描述了在軟件設(shè)計(jì)過程中的一些不斷重復(fù)發(fā)生的問題和解決方案。遇到類似問題的時(shí)候可以直接使用現(xiàn)成的模式方案。 ①單例模式中一個(gè)類只

    2024年02月04日
    瀏覽(30)
  • c++單例模式包括懶漢模式和餓漢模式(優(yōu)劣勢(shì)分析和改進(jìn)方法)

    c++單例模式包括懶漢模式和餓漢模式(優(yōu)劣勢(shì)分析和改進(jìn)方法)

    在整個(gè)軟件的運(yùn)行過程中,讓整個(gè)類有且只有一個(gè)實(shí)例化對(duì)象存在于整個(gè)進(jìn)程中。 是最簡(jiǎn)單的一個(gè)設(shè)計(jì)模式,然后再項(xiàng)目開發(fā)中也是使用最廣的。 1.節(jié)省資源:再整個(gè)軟件的運(yùn)行過程中,只有一個(gè)實(shí)例化對(duì)象,不用重新分配新的堆空間。 2.數(shù)據(jù)的傳遞:由于單例只會(huì)創(chuàng)建一個(gè)

    2024年02月21日
    瀏覽(24)
  • Java單例模式的五種實(shí)現(xiàn)方式 懶漢式 餓漢式 雙重校驗(yàn)鎖 靜態(tài)變量 靜態(tài)內(nèi)部類 枚舉實(shí)現(xiàn)單例模式等

    Java單例模式是一種設(shè)計(jì)模式,用于確保一個(gè)類只有一個(gè)實(shí)例,并提供全局訪問點(diǎn)以獲取該實(shí)例。它通常用于需要共享資源或控制某些共享狀態(tài)的情況下。 懶漢式:在類加載的時(shí)候就創(chuàng)建對(duì)象,要再調(diào)用方法時(shí)才創(chuàng)建對(duì)象,減少內(nèi)存開銷。 餓漢式:再類加載的時(shí)候就實(shí)例化對(duì)

    2024年04月27日
    瀏覽(32)
  • 如何理解單例模式----餓漢式?

    目錄 1.前言 2.本質(zhì) 3.代碼默寫 在面試中,理解和掌握單例模式是非常重要的。本文旨在幫助讀者深入理解餓漢式單例模式,并通過簡(jiǎn)潔明了的解釋和示例代碼,使讀者能夠輕松掌握并默寫出餓漢式單例模式的代碼實(shí)現(xiàn)。 餓漢式單例模式是一種單例設(shè)計(jì)模式的實(shí)現(xiàn)方式,它在

    2024年01月18日
    瀏覽(21)
  • 【Java中23種設(shè)計(jì)模式-單例模式--餓漢式】

    加油,新時(shí)代打工人! 簡(jiǎn)單粗暴,直接上代碼。 23種設(shè)計(jì)模式定義介紹 Java中23種設(shè)計(jì)模式-單例模式 Java中23種設(shè)計(jì)模式-單例模式2–懶漢式線程不安全 Java中23種設(shè)計(jì)模式-單例模式2–懶漢式2線程安全

    2024年02月22日
    瀏覽(19)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包