懶漢式和餓漢式單例設計模式

 

餓漢式:

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


     懶漢式1:
       public class Singleton{
            private static Singleton singleton = null;
            public static synchronized  getInstance(){
                 if(singleton==null){
                     singleton = new Singleton();
                 }
                return singleton;
            }

       } 

   懶漢式2

public class LazySignleton {
    
private static LazySignleton INSTANCE = null;
    
//私有化構造子,阻止外部直接實例化對象
   private LazySignleton(){
       
    }

     // 獲取類的單例實例
    public static LazySignleton getInstance(){
        
if(INSTANCE == null){
            
synchronized (LazySignleton.class{
              
if(INSTANCE == null){
                   INSTANCE 
= new LazySignleton();
              }

           }
       }
      return INSTANCE;
   }

}

     比較:
         餓漢式是線程安全的,在類創建的同時就已經創建好一個靜態的對象供系統使用,以後不在改變
          懶漢式如果在創建實例對象時不加上synchronized則會導致對對象的訪問不是線程安全的
          推薦使用第一種 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章