2018-05-14

2018-05-14  本文已影响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 内存 模型的原因偶尔会失败,在高并发环境下,有一定缺陷,虽然发生概率很小。(很常用)
上一篇下一篇

猜你喜欢

热点阅读