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

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

單例模式的多線程

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

專業(yè)從事網(wǎng)站制作、網(wǎng)站建設(shè),高端網(wǎng)站制作設(shè)計(jì),微信平臺(tái)小程序開發(fā),網(wǎng)站推廣的成都做網(wǎng)站的公司。優(yōu)秀技術(shù)團(tuán)隊(duì)竭力真誠服務(wù),采用H5技術(shù)+CSS3前端渲染技術(shù),成都響應(yīng)式網(wǎng)站建設(shè),讓網(wǎng)站在手機(jī)、平板、PC、微信下都能呈現(xiàn)。建站過程建立專項(xiàng)小組,與您實(shí)時(shí)在線互動(dò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)行過程中只有一個(gè)線程調(diào)用該方法獲得該類的一個(gè)實(shí)例,但是缺點(diǎn)也是如此:只有在第一次使用該對象時(shí)需要同步,再次
獲取該對象時(shí)就不需要再同步了,這時(shí)候的同步就變的多余了。
2、其實(shí)餓漢模式就是改善多線程的一種有效手段,這樣JVM保證任何線程訪問單例對象時(shí),一定先創(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個(gè)線程走到了(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í)例時(shí),多個(gè)線程正確地uniqueInstance變量。如果性能是你關(guān)心的重點(diǎn),那么這個(gè)做法可以幫你大大地減少getInstance()的時(shí)間耗費(fèi)。


當(dāng)前文章:單例模式的多線程
文章分享:http://weahome.cn/article/gseejo.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部