单例模式的性能优化

//单例模式 ①
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;     } }
相关文章
相关标签/搜索