设计模式-1-单例模式

简介:这些类无论实例化多少都是一样的; 这些类在整个应用中同一时刻只有一个状态
目的:节省内存,减少GC消耗

总结:整个系统中只有一个实例存在


标准单例模式:

public class Persion{

  private Persion(){};
  public static Persion getInstance(){
    return PersionSingleton.persion;
  }

  private static class PersionSingleton{
    static Persion persion = new Persion();
  }
}

 

标准单例模式优点:
1,Persion只有一个实例
2,不会因并发产生多个实例
3,不会因JVM调优,出现还未正确初始化的实例

JVM创建对象步骤:
1,分配内存 //new
2,初始化构造器 //Persion()
3,将对象指向已分配的内存地址 //Persion persion =


反例1:

public class Singleton{
  
private static Singleton singleton;   private Singleton(){};
  
public Singleton getInstance(){     if(singleton == null){ //判断null条件遇到并发问题,会出现多个实例化操作       singleton = new Singleton();     }     return singleton;   } }

 


反例2:

public class Singleton{
private static Singleton singleton; private Singleton(){};
public Singleton getInstance(){   if(singleton == null){     synchronized (Singleton.class){       if(singleton == null){         singleton = new Singleton(); //多线程情况下存在,第一个线程实例化释放锁后,第二个线程使用第一个线程实例化的对象会出现错误       } //因为第二个线程可能会使用到还没有完全创建好的实例(JVM内部调优会出现地址已分配但没有初始化的情况)     }   }   return singleton; } }

 

posted @ 2017-02-22 12:59  wanhua.wu  阅读(159)  评论(0编辑  收藏  举报