單例模式實現對比

參考鏈接: 單例模式

一、實現對比

推薦指數 實現方式 多線程安全 Lazy初始化 實現難度 內存消耗 執(zhí)行效率 JDK版本
**** 枚舉 1.5+
**** 餓漢式 -
*** 靜態(tài)內部類 一般 優(yōu) -
** 雙檢鎖/雙重校驗鎖(DCL) 復雜 優(yōu) 1.5+
* 懶漢式(非線程安全) 優(yōu) -
* 懶漢式(線程安全) 優(yōu) 極低 -

二、實現方式

懶漢式(非線程安全)

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

懶漢式(線程安全)

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

[推薦] 餓漢式

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

Classloder機制避免了多線程的同步問題

雙檢鎖/雙重校驗鎖(DCL)

    public class Singleton {  
        private volatile static Singleton singleton;  
        private Singleton (){} 
         
        public static Singleton getSingleton() {  
              if (singleton == null) {  
                  synchronized (Singleton.class) {  
                        if (singleton == null) {  
                            singleton = new Singleton();  
                        }  
                  }  
              }  
              
              return singleton;  
        }  
    } 

[推薦] 靜態(tài)內部類

    public class Singleton {  
    
        private static class SingletonHolder {  
                private static final Singleton INSTANCE = new Singleton();  
        }  
        
        private Singleton (){}  
        
        public static final Singleton getInstance() {  
               return SingletonHolder.INSTANCE;  
        }  
    }

Classloder機制避免了多線程的同步問題

[推薦] 枚舉

    public enum Singleton {  
        INSTANCE; 
         
        public static Singleton getInstance() {
            return INSTANCE;
        }

        public void method() {  
        }  
    }  
?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • 單例模式(SingletonPattern)一般被認為是最簡單、最易理解的設計模式,也因為它的簡潔易懂,是項目中最...
    成熱了閱讀 4,530評論 4 34
  • 1.單例模式概述 (1)引言 單例模式是應用最廣的模式之一,也是23種設計模式中最基本的一個。本文旨在總結通過Ja...
    曹豐斌閱讀 3,062評論 6 47
  • 摘要:設計模式之一:單例模式目錄介紹1.單例模式介紹2.單例模式定義3.單例模式使用場景4.單例模式的實現方式 4...
    肆虐的悲傷閱讀 543評論 0 2
  • 近日,教育部發(fā)布關于2017年中小學教學用書有關事項的通知。通知明確要求,中小學教材中一律不得出現提供額外教學輔助...
    補習club閱讀 963評論 0 0
  • 新教師展示課就這么火急火燎的來了,早晨我表面還在領著孩子們讀課文,盯早讀。實際上……心里急呀,緊張??!糊里糊涂地把...
    沂南036張霞閱讀 389評論 1 0

友情鏈接更多精彩內容