美文网首页Java程序性能优化
设计优化之单例模式

设计优化之单例模式

作者: Chinesszz | 来源:发表于2017-06-04 00:07 被阅读5次
    写一个简单的单例模式
    public class Singleton{
      private Singleton(){
        ...
      }
      private static Singleton instance=new Singleton();
      
      public static Singleton getInstance(){
        return instance;
      }
    }
    
    
    • 此种方法,简单没有任何修饰,但是单例是static修改的也就是说,类加载时候就会创建,当私有构造里面耗时较长的时候,类初始化会变得很慢,切每次调用getInstance方式都会初始化一次,所以会很费时,但是非大型项目,对程序要求高的项目中,也是可以使用的。笔者在工作初期,经常使用这种方式
    懒加载单例
    public class LazySingleton{
      private LazySingleton(){
      ...
      }
      private static LazySingleton instance=null;
      public static synchronized LazySingleton getInstance(){
        if(instance==null){
          instance=new LazySingleton();
        }
        return instance;
      }
    }
    
    
    • 此方法虽然也有可能在私有构造中加载耗时操作,但是在类初始化时候并未创建,而是在调用getInstance时候才会创建,切只会创建一次,但是要用关键字修改,防止线程一正创建时候,线程二判断为null,又创建。但是明显当看到synchronized关键字,它在多线程时候的效率就不会高了,此方法笔者不经常使用。

    重头戏优化的单例

    /**
     * Created by mac on 2017/6/3.
     * 单例模式:
     * 此种方法好处,
     * 静态内部类并不会直接加载,当调用instance方法时候才会加载
     * 
     * 使用同步关键字修饰的会降低速度
     */
    public class StaticSingleton {
        private StaticSingleton(){
        }
        private static class SingletonHolder{
            private static StaticSingleton instance=new StaticSingleton();
        }
        public static StaticSingleton getInstance(){
            return SingletonHolder.instance;
        }
    }
    
    • 当StaticSingleton被加载时候,内部类并不会加载,当调用getInstance方法时候,才会初始化,由于实例是在类加载完成是建立,所以天生对线程友好。

    相关文章

      网友评论

        本文标题:设计优化之单例模式

        本文链接:https://www.haomeiwen.com/subject/futvfxtx.html