美文网首页
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