美文网首页
2018-05-14

2018-05-14

作者: 我有一个梦想_先挣它一个亿 | 来源:发表于2018-05-14 17:44 被阅读0次

    单利设计模式

    懒汉式 单例模式

     <pre>    
    
     public class MyPrototypeLazySingleModel {
    private static MyPrototypeLazySingleModel instance ;
    
    private MyPrototypeLazySingleModel() {
    }
    
    public static synchronized MyPrototypeLazySingleModel getInstance(){
        if(instance == null){
            instance = new MyPrototypeLazySingleModel();
        }
        return instance;
    }
     }    
      
     </pre>  
    

    饿汉式 单利模式

         <pre>
    
        public class MyPrototypeHungrySingleModel {
    private static  MyPrototypeHungrySingleModel instance = new  MyPrototypeHungrySingleModel();
    private MyPrototypeHungrySingleModel() {}
    
    public static synchronized MyPrototypeHungrySingleModel getInstance(){
        return instance;
    }
     }
    
     </pre> 
    
    懒汉式与饿汉式的区别:
     懒汉式:实名一个静态对象,并且在用户第一次调用getInstance 时进行初始化,
     优点:单例只有在使用时才会被实例化,一定程度上节约了资源。
     缺点:是第一次加载时需要及时进行实例化,反应稍慢,最大的问题是每次调用getInstance 都进行同步,造成不必要的同步开销。一般不建议这么用。
    

    双重锁式 单例模式 (DCL )

      <pre>    
    
       public class myPrototypeSingleModel {
    
    private static volatile myPrototypeSingleModel instance = null;
    private myPrototypeSingleModel() {}
    public static myPrototypeSingleModel getInstance(){
        if(instance == null){
            synchronized (myPrototypeSingleModel.class){
                if(instance == null){
                    instance = new myPrototypeSingleModel();
                }
            }
        }
        return instance;
    }
    }
    </pre>       
      
      DCL 的优点,资源利用率高,第一次执行getInstance 时才会被实例化,效率高。
      缺点:第一次加载反应慢,也由于java 内存 模型的原因偶尔会失败,在高并发环境下,有一定缺陷,虽然发生概率很小。(很常用)
    

    相关文章

      网友评论

          本文标题:2018-05-14

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