单例模式

单例模式

静态常量

public class Singleton{
  
  private final static Singleton Instance = new Singleton();
  
  private Singleton(){}
 
  public static Singleton getInstance(){
    return Instance;
  }
}
public class Singleton{
  
  private final static Singleton Instance ;
  
  static{
    Instance = new Singleton()
  }
  
  private Singleton(){}
  
  public static Singleton getInstance(){
    return Instance;
  }
}

public class Singleton {

    private Singleton() {}

    private static class SingletonInstance {
        private static final Singleton INSTANCE = 
          						new Singleton();
    }

    public static Singleton getInstance() {
        return SingletonInstance.INSTANCE;
    }
}

加锁方式

public class Singleton {

    private static Singleton singleton;

    private Singleton() {}

    public static synchronized Singleton getInstance() {
        if (singleton == null) {
            singleton = new Singleton();
        }
        return singleton;
    }
}
//不推荐  悲观锁
public class Singleton {

    private static volatile Singleton singleton;

    private Singleton() {}

    public static Singleton getInstance() {
        if (singleton == null) {
            synchronized (Singleton.class) {
                if (singleton == null) {
                    singleton = new Singleton();
                }
            }
        }
        return singleton;
    }
}	//推荐

枚举

public enum Singleton {
    INSTANCE;
    public void whateverMethod() {
    }
}

错误方法

public class Singleton {

    private static Singleton singleton;

    private Singleton() {}

    public static Singleton getInstance() {
        if (singleton == null) { //多线程时 可能创建多个实例
            singleton = new Singleton();
        }
        return singleton;
    }
}	
public class Singleton {

    private static Singleton singleton;

    private Singleton() {}

    public static Singleton getInstance() {
        if (singleton == null) { //多线程 产生多实例
            synchronized (Singleton.class) {
                singleton = new Singleton();
            }
        }
        return singleton;
    }
}
posted @ 2018-09-07 22:34  图图突tu  阅读(95)  评论(0编辑  收藏  举报