單例模式的多線程-創(chuàng)新互聯(lián)

單例模式的原理:保證一個類有一個實(shí)例,并且提供一個全局的訪問點(diǎn)(內(nèi)存地址唯一)

創(chuàng)新互聯(lián)公司為您提適合企業(yè)的網(wǎng)站設(shè)計?讓您的網(wǎng)站在搜索引擎具有高度排名,讓您的網(wǎng)站具備超強(qiáng)的網(wǎng)絡(luò)競爭力!結(jié)合企業(yè)自身,進(jìn)行網(wǎng)站設(shè)計及把握,最后結(jié)合企業(yè)文化和具體宗旨等,才能創(chuàng)作出一份性化解決方案。從網(wǎng)站策劃到成都網(wǎng)站設(shè)計、做網(wǎng)站, 我們的網(wǎng)頁設(shè)計師為您提供的解決方案。

實(shí)現(xiàn)方式:

1、飽漢模式:

  1: publicclass Singleton{
  2:  
  3:   privatestatic Singleton s = null;
  4:
  5:   private Singleton(){
  6:
  7:   }
  8:
  9:   publicstatic Singleton getInstance(){
 10:    
 11:    if(s ==null){
 12:     s = new Singleton();
 13:    }
 14:    return s;
 15:   }
 16: }

2、餓漢模式

  1: publicclass Singleton{
  2:  privatestatic Singleton s = new Singleton();
  3:  private Sinleton(){}
  4:  publicstatic Singleton getInstance(){
  5:   return s;
  6:   }
  7: }
單例模式的線程安全問題:
    1、通過synchronized關(guān)鍵字來實(shí)現(xiàn)
  1: publicclass Single
  2: {
  3:  privatestatic Single single ;
  4:  private Single(){
  5:  }
  6:  publicstaticsynchronized Single getInstance(){
  7:   if(single == null){
  8:    single = new Single();
  9:   }
 10:   return single;
 11:  }
 12: }
這樣的話可以強(qiáng)制在程序運(yùn)行過程中只有一個線程調(diào)用該方法獲得該類的一個實(shí)例,但是缺點(diǎn)也是如此:只有在第一次使用該對象時需要同步,再次
獲取該對象時就不需要再同步了,這時候的同步就變的多余了。
2、其實(shí)餓漢模式就是改善多線程的一種有效手段,這樣JVM保證任何線程訪問單例對象時,一定先創(chuàng)建該實(shí)例,代碼同上
3、另外一種改善多線程的方式
  1: publicclass Singleton {
  2:
  3:   privatevolatilestatic Singleton uniqueInstance;
  4:  
  5:   private Singleton() {}
  6:     
  7:   publicstatic Singleton getInstance() {
  8:  if(uniqueInstance == null) { //(1)
  9:     //只有第一次才徹底執(zhí)行這里的代碼
 10:    synchronized() {
 11:     //再檢查一次
 12:     if(uniqueInstance == null)
 13:   uniqueInstance = new Singleton();
 14:     }
 15:  }
 16:      return uniqueInstance;
 17:   }
 18: }

在最開始如果有1、2、3個線程走到了(1)處,假設(shè)1進(jìn)入了同步塊,2、3等待。1實(shí)例化后,2進(jìn)入同步塊,發(fā)現(xiàn)uniqueInstance已經(jīng)不為空,跳出同步塊。接著3進(jìn)入,又跳出同步塊。

  volatile關(guān)鍵字確保:當(dāng)uniqueInstance變量被初始化成Singleton實(shí)例時,多個線程正確地uniqueInstance變量。如果性能是你關(guān)心的重點(diǎn),那么這個做法可以幫你大大地減少getInstance()的時間耗費(fèi)。

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點(diǎn)與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。

網(wǎng)站欄目:單例模式的多線程-創(chuàng)新互聯(lián)
鏈接分享:http://www.muchs.cn/article12/ihcgc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站營銷、網(wǎng)站內(nèi)鏈小程序開發(fā)、虛擬主機(jī)、外貿(mào)建站、網(wǎng)站維護(hù)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都seo排名網(wǎng)站優(yōu)化