亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Java > 正文

JAVA實現單例模式的四種方法和一些特點

2019-11-26 16:13:13
字體:
來源:轉載
供稿:網友

一、餓漢式單例類

復制代碼 代碼如下:

public class Singleton 

    private Singleton(){ 

    } 

    private static Singleton instance = new Singleton(); 

    private static Singleton getInstance(){ 
        return instance; 
    } 

特點:餓漢式提前實例化,沒有懶漢式中多線程問題,但不管我們是不是調用getInstance()都會存在一個實例在內存中

二、內部類式單例類

復制代碼 代碼如下:

public class Singleton    
{       
        private Singleton(){    

    }    

    private class SingletonHoledr(){    
        private static Singleton instance = new Singleton();    
    }    

    private static Singleton getInstance(){    
        return SingletonHoledr.instance;    
    }    
}

特點:內部類式中,實現了延遲加載,只有我們調用了getInstance(),才會創建唯一的實例到內存中.并且也解決了懶漢式中多線程的問題.解決的方式是利用了Classloader的特性.

三、懶漢式單例類

復制代碼 代碼如下:

public class Singleton    
{       
    private Singleton(){    

    }    

    private static Singleton instance;    
    public static Singleton getInstance(){    
        if(instance == null){    
            return instance = new Singleton();    
        }else{    
            return instance;    
        }    
    }    
}  

特點:在懶漢式中,有線程A和B,當線程A運行到第8行時,跳到線程B,當B也運行到8行時,兩個線程的instance都為空,這樣就會生成兩個實例。解決的辦法是同步:

可以同步但是效率不高:

復制代碼 代碼如下:

public class Singleton    
{       
    private Singleton(){    

    }    

    private static Singleton instance;    
    public static synchronized Singleton getInstance(){    
        if(instance == null){    
            return instance = new Singleton();    
        }else{    
            return instance;    
        }    
    }    
}

這樣寫程序不會出錯,因為整個getInstance是一個整體的"critical section",但就是效率很不好,因為我們的目的其實只是在第一個初始化instance的時候需要locking(加鎖),而后面取用instance的時候,根本不需要線程同步。

于是聰明的人們想出了下面的做法:

雙檢鎖寫法:

復制代碼 代碼如下:

public class Singleton{ 
  private static Singleton single;    //聲明靜態的單例對象的變量 
  private Singleton(){}    //私有構造方法  

  public static Singleton getSingle(){    //外部通過此方法可以獲取對象   
    if(single == null){    
        synchronized (Singleton.class) {   //保證了同一時間只能只能有一個對象訪問此同步塊       
            if(single == null){     
                single = new Singleton();         
        }    
      } 
    }   
    return single;   //返回創建好的對象  
  } 

思路很簡單,就是我們只需要同步(synchronize)初始化instance的那部分代碼從而使代碼既正確又很有效率。
這就是所謂的“雙檢鎖”機制(顧名思義)。
很可惜,這樣的寫法在很多平臺和優化編譯器上是錯誤的。

原因在于:instance = new Singleton()這行代碼在不同編譯器上的行為是無法預知的。一個優化編譯器可以合法地如下實現instance = new Singleton():

1. instance  = 給新的實體分配內存

2. 調用Singleton的構造函數來初始化instance的成員變量

現在想象一下有線程A和B在調用getInstance,線程A先進入,在執行到步驟1的時候被踢出了cpu。然后線程B進入,B看到的是instance  已經不是null了(內存已經分配),于是它開始放心地使用instance,但這個是錯誤的,因為在這一時刻,instance的成員變量還都是缺省值,A還沒有來得及執行步驟2來完成instance的初始化。

當然編譯器也可以這樣實現:

1. temp = 分配內存

2. 調用temp的構造函數

3. instance = temp

如果編譯器的行為是這樣的話我們似乎就沒有問題了,但事實卻不是那么簡單,因為我們無法知道某個編譯器具體是怎么做的,因為在Java的memory model里對這個問題沒有定義。

雙檢鎖對于基礎類型(比如int)適用。很顯然吧,因為基礎類型沒有調用構造函數這一步。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美成人精品不卡视频在线观看| 精品精品国产国产自在线| 国产精品自产拍在线观| 91精品国产91久久久久久最新| 久久男人的天堂| 国产成人精品最新| 亚洲bt欧美bt日本bt| 亚洲码在线观看| 亚洲二区中文字幕| 欧美在线亚洲在线| 欧美日韩亚洲精品内裤| 欧美日韩国产精品一区二区三区四区| 久久人人97超碰精品888| 久久综合伊人77777| 亚洲国产三级网| 国产成人精品电影| 欧美性猛交xxxx乱大交3| 插插插亚洲综合网| 日韩欧美精品网站| 精品视频在线观看日韩| 欧美电影免费观看| 亚洲成人网在线观看| 国产91色在线免费| 欧美孕妇毛茸茸xxxx| 国产午夜精品免费一区二区三区| 国产精品欧美风情| 亚州av一区二区| 91高清免费在线观看| 97人人模人人爽人人喊中文字| 欧美色欧美亚洲高清在线视频| 亚洲一区制服诱惑| 欧美高清自拍一区| 欧美另类xxx| 国产成人精品最新| 国产一区二区三区高清在线观看| 8x海外华人永久免费日韩内陆视频| 欧美性xxxx极品hd满灌| 成人黄色短视频在线观看| 久久亚洲精品中文字幕冲田杏梨| 久久久人成影片一区二区三区| 国产精品96久久久久久又黄又硬| 亚洲福利视频久久| 欧美做受高潮1| 色香阁99久久精品久久久| 成人免费激情视频| 欧美激情综合亚洲一二区| 精品偷拍各种wc美女嘘嘘| 国产91精品视频在线观看| 欧美日本黄视频| 成人久久久久久| 国产亚洲视频中文字幕视频| 欧美性猛交99久久久久99按摩| 亚洲一区二区久久久久久| 亚洲精品国产品国语在线| 欧美大尺度电影在线观看| 国产有码在线一区二区视频| 久久艹在线视频| 欧美成人午夜激情在线| 97成人精品视频在线观看| 青青精品视频播放| 亚洲va电影大全| 中文字幕在线观看亚洲| 91久久国产综合久久91精品网站| 久久99热精品这里久久精品| 国产精品pans私拍| 欧美高清在线视频观看不卡| 91丝袜美腿美女视频网站| 欧美午夜精品久久久久久人妖| 中文字幕av一区二区三区谷原希美| 精品国产成人av| 国产91精品视频在线观看| 欧美激情乱人伦| 黄色成人在线播放| 亚洲第一中文字幕在线观看| 亚洲国产成人在线视频| 一本色道久久综合亚洲精品小说| 亚洲国模精品一区| 国产成人免费av| 国产精品久久久久久影视| 亚洲第一福利网| 欧美在线视频免费播放| 午夜剧场成人观在线视频免费观看| 中文字幕精品网| 色偷偷噜噜噜亚洲男人的天堂| 在线国产精品播放| 色综合久久天天综线观看| 97久久超碰福利国产精品…| 国产精品久久久精品| 久99九色视频在线观看| 亚洲第一av网| 中文字幕亚洲色图| 欧美视频在线视频| 日韩欧美精品免费在线| 影音先锋欧美精品| 国产美女精品视频免费观看| 日韩精品中文在线观看| 国产精品入口福利| 丝袜美腿亚洲一区二区| 亚洲日本成人网| 久久久久国色av免费观看性色| 久久精品夜夜夜夜夜久久| 疯狂做受xxxx欧美肥白少妇| 日韩av网站电影| 欧美日韩中文字幕综合视频| 国产一区二区三区日韩欧美| 国产中文日韩欧美| 久久99精品视频一区97| 午夜精品久久久久久99热软件| 国自产精品手机在线观看视频| 2020欧美日韩在线视频| 成人欧美一区二区三区黑人孕妇| 亚洲影视中文字幕| 91精品久久久久久久久久另类| 欧美成人精品h版在线观看| 精品国产一区二区三区久久狼5月| 亚洲激情视频网站| 欧美又大又硬又粗bbbbb| 日韩精品中文字幕在线观看| 色婷婷综合成人| 亚洲精品成人久久电影| 欧美激情网站在线观看| 亚洲美女在线视频| 69影院欧美专区视频| 色综合色综合网色综合| 亚洲精品网址在线观看| 欧美第一页在线| 伊人久久久久久久久久| www.亚洲一二| 中文字幕日韩有码| 日韩视频免费看| 成人免费午夜电影| 国产精品精品视频一区二区三区| 亚洲精品资源在线| 欧美精品免费看| 欧美大片免费看| 国内偷自视频区视频综合| 成人在线一区二区| 91国产美女视频| 热门国产精品亚洲第一区在线| 91九色国产视频| 亚洲国产精彩中文乱码av在线播放| 欧美激情一区二区三区久久久| 国产成人短视频| 欧美黑人巨大精品一区二区| 国外色69视频在线观看| www国产精品视频| 热草久综合在线| 欧美国产日韩二区| 国产精品久久久久91| 欧美精品久久久久| 欧美精品中文字幕一区| 日韩风俗一区 二区| 国产精品91一区| 国产mv久久久| 欧美日韩在线视频一区| 在线日韩精品视频| 欧美成人免费全部观看天天性色| 亚洲免费中文字幕| 国产精品直播网红| 日韩成人黄色av| 国产亚洲视频中文字幕视频| 亚洲国产欧美精品| 92版电视剧仙鹤神针在线观看| 亚洲一区精品电影|