the journey is the reward...

          常用鏈接

          統計

          最新評論

          Singleton設計模式,需要雙重檢查嗎?

          Singleton設計模式,雙重檢查樣列如下:

        1. public class Singleton   
        2. {   
        3.     private static final Singleton singleton = null;   
        4.   
        5.     private Singleton()   
        6.     {   
        7.     }   
        8.     public static Singleton getInstance()   
        9.     {   
        10.         if (singleton== null)   
        11.         {   
        12.             synchronized (Singleton.class)   
        13.             {   
        14.                 if (singleton== null)   
        15.                 {   
        16.                     singleton= new Singleton();   
        17.                 }   
        18.             }   
        19.         }   
        20.         return singleton;   
        21.     }   
        22. }  
        23.  

          簡單樣列1:

          public class Singleton { 
           private final static Singleton instance=new Singleton();
           private Singleton(){}
           public static Singleton getInstance(){ 
            return instance; 
           }
          }

           

          雙重檢查很通用,但是它引以為傲的是性能的優化(在getInstance被很多很多次調用的情況下).

          呵呵,我就直接說結論了:在性能上最優的是 簡單樣列1 [當然也是在getInstance被很多很多次調用的情況下].

          簡單樣列1是非惰性加載,所以有人要反駁說 如果我不用到Singleton 的實例豈不是白占了內存.

          所以你選擇 簡單樣列1 還是 雙重檢查 是要根據你的實際情況的,如果在程序中對單列類引用的頻率是很高的,那么應該選擇 簡單樣列1,反之 雙重檢查.

           

           

           

          posted on 2010-03-03 21:13 adapterofcoms 閱讀(365) 評論(1)  編輯  收藏 所屬分類: java bbs

          評論

          # re: Singleton設計模式,需要雙重檢查嗎? 2010-03-25 18:12 xylz

          雙重檢查除了延遲加載外最大的好處在于,如果構造函數出現了異常,在下次訪問時可能被正確初始化,而靜態域意味著一旦初始化失敗將永遠得不到實例對象。  回復  更多評論   

          主站蜘蛛池模板: 济源市| 双流县| 上蔡县| 公主岭市| 大足县| 庐江县| 道真| 贵州省| 苏尼特右旗| 闵行区| 犍为县| 铜川市| 莫力| 镇平县| 方城县| 光山县| 湘阴县| 淮滨县| 高要市| 洛阳市| 河南省| 大庆市| 石林| 岗巴县| 潼关县| 乌什县| 蓬安县| 阜南县| 盐池县| 顺昌县| 镇原县| 南川市| 巍山| 遂昌县| 遵义市| 阿巴嘎旗| 嘉禾县| 巢湖市| 德安县| 淅川县| 汕尾市|