美文网首页
单例模式的三种情况

单例模式的三种情况

作者: d9610fcd3279 | 来源:发表于2019-03-24 19:26 被阅读0次

    1 饿汉式
    一上来就创建
    线程安全 但是不能延时加载容易造成内存浪费

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

    2 懒汉式

    先定义一个变量
    判断不为空再创建
    线程安全 可以延时加载 如果不加synchronized关键字就不线程安全了

    public class SingletonDemo2 {
         
        //类初始化时,不初始化这个对象(延时加载,真正用的时候再创建)
        private static SingletonDemo2 instance;
         
        //构造器私有化
        private SingletonDemo2(){}
         
        //方法同步,调用效率低
        public static synchronized SingletonDemo2 getInstance(){
            if(instance==null){
                instance=new SingletonDemo2();
            }
            return instance;
        }
    }
    

    3静态内部类

    跟饿汉模式有点类似,只是在类装载的时候,SingletonHolder并没有被主动使用,只有显式调用getInstance方法是,才会调用装载SingletoHolder类,从而实例化instance,既实现了线程安全,又避免了同步带来的性能影响。

    public class SingletonDemo3 {
     2      
     3     private static class SingletonClassInstance{
     4         private static final SingletonDemo3 instance=new SingletonDemo3();
     5     }
     6      
     7     private SingletonDemo3(){}
     8      
     9     public static SingletonDemo3 getInstance(){
    10         return SingletonClassInstance.instance;
    11     }
    12      
    13 }
    

    相关文章

      网友评论

          本文标题:单例模式的三种情况

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