日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
java中單例模式餓漢式與懶漢式的對比

java 中單例模式餓漢式與懶漢式的對比

成都網(wǎng)站建設(shè)、成都網(wǎng)站設(shè)計(jì),成都做網(wǎng)站公司-創(chuàng)新互聯(lián)已向數(shù)千家企業(yè)提供了,網(wǎng)站設(shè)計(jì),網(wǎng)站制作,網(wǎng)絡(luò)營銷等服務(wù)!設(shè)計(jì)與技術(shù)結(jié)合,多年網(wǎng)站推廣經(jīng)驗(yàn),合理的價(jià)格為您打造企業(yè)品質(zhì)網(wǎng)站。

概念:

保證一個(gè)類僅有一個(gè)實(shí)例,并提供一個(gè)訪問它的全局訪問點(diǎn)。

以前我們的做法是設(shè)置一個(gè)全局變量,也就是讓它使得一個(gè)對象被訪問。但是它不能防止你實(shí)例多個(gè)對象。這時(shí)我們可以讓類自身負(fù)責(zé)保存它的唯一實(shí)例,這個(gè)類可以保證沒有其他實(shí)例可以被創(chuàng)建,并且提供一個(gè)訪問該實(shí)例的方法。

通過上面的描述,我們可以看到單例模式有以下特點(diǎn):

1、單例類只能有一個(gè)實(shí)例。
  2、單例類必須自己自己創(chuàng)建自己的唯一實(shí)例。
  3、單例類必須給所有其他對象提供這一實(shí)例。

因此,創(chuàng)建一個(gè)類的實(shí)例的具體方法(要素)是:

      1、 私有的、靜態(tài)的成員變量
      2、 私有的構(gòu)造方法
      3、 公共的、靜態(tài)的一個(gè)入口方法

根據(jù)上面的具體方法,我們來看一下下面的代碼

public class Test { 
  private static Test instance = new Test ();  
   
  private Test (){ 
   
  } 
   
  public static Test GetInstance(){ 
    return instance; 
  } 
} 

從上面的代碼中我們看出,當(dāng)類加載到內(nèi)存時(shí),在我們調(diào)用GetInstance()方法之前,就已經(jīng)在內(nèi)存中創(chuàng)建了一個(gè)instance對象。也就是說,不管我是否想用這個(gè)方法,在內(nèi)存中就已經(jīng)存在instance這個(gè)對象了,此時(shí)這個(gè)對象就是多余對象了,這樣就會(huì)占用內(nèi)存資源。因此我們將這種單例模式稱作“餓漢式”單例模式。其實(shí)就是一個(gè)“預(yù)加載”的過程。

而“懶漢式”單例模式(也就是“延遲式”創(chuàng)建對象)則是在我們需要的時(shí)候才去創(chuàng)建這個(gè)對象。這樣就避免了提前創(chuàng)建對象占用內(nèi)存資源。


public class Test { 
  private static Test instance = null; 
   
  private Test (){ 
     
  } 
  public static Test getInstance(){ 
    if (instance == null) then { 
      instance = new Test (); 
    } 
    return instance; 
  } 
} 

但是,通過觀察上面的代碼,我們可以看出其中還是存在一些問題的。假設(shè),有多個(gè)進(jìn)程同時(shí)調(diào)用getInstance()方法,這樣就可能出現(xiàn)同時(shí)創(chuàng)建多個(gè)對象,那這就不是單例模式了。因此,我們可以加入“同步”這個(gè)關(guān)鍵字使得我們的代碼更加的嚴(yán)謹(jǐn)。改進(jìn)之后是這樣的

public class Test { 
  private static Test instance = null; 
   
  private Test (){ 
     
  } 
  public static synchronized Test getInstance(){ 
    if (instance == null) then { 
      instance = new Test (); 
    } 
    return instance; 
  } 
} 

 以上就是java中兩種單例模式的對比,如有疑問請留言或者到本站社區(qū)交流討論,感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!


網(wǎng)頁名稱:java中單例模式餓漢式與懶漢式的對比
地址分享:http://www.dlmjj.cn/article/iehjgo.html