單例模式的性能優化

//單例模式 ①
public  class Singleton{

     // 訪問級別設置爲private,確保在系統的其餘代碼不會被實例化
     private Singleton(){}
    
     // 聲明static,在jvm加載單例類時,單例對象就會被創建
     private  static Singleton singletion =  new Singleton();

     public  static Singleton getInstance(){
         return singleton;
    }
}


//①中,因爲jvm在加載單例類時,單例對象就被創建;當單例類在其餘代碼中扮演了其餘的角色時,那麼在任何使用這個單例類的地方都會初始化這個單例變量。
//無論是否有被用到。因此,當建立單例很慢時,這種方式就存在不足了。

//解決思路:即在jvm加載單例類時,單例對象沒有被創建;當須要使用單例對象時,才創建
//單例模式   ②
//不足:雖然實現了延遲加載功能,但在多線程環境下,耗時要比①高
public  class Singleton{
     private Singleton(){}
    
     private  static Singleton singleton =  null;
    
     // 同步,防止多線程環境下建立多個實例
     public  static  synchronized Singleton getInstance(){
         if(singleton ==  null){
            singleton =  new Singleton();
        }
        
         return singleton;
    }
}


//單例模式  ③
//當Singleton加載時,不會初始化其內部類;只有在調用getInstance這個方法時,纔會加載內部類SingletonHolder,實現了延遲加載的功能,又下降系統性能。
public  class Singleton{
     private Singleton(){}
    
     private  static  class SingletonHolder{
         private  static Singleton instance =  new Singleton();    
    }
    
     public  static Singleton getInstance(){
         return SingletonHolder.instance;     } }
相關文章
相關標籤/搜索