java设计模式----单例模式

单例模式:

  确保一个类只有一个实例,并提供一个全局访问点

饿汉式:(线程安全)

public class Singleton {
  private static Singleton uniqueInstance = new Singleton();

  private Singleton() {

  }

  public static Singleton getInstance() {
    return uniqueInstance;
  }
}

懒汉式:(线程不安全)

public class Singleton {
  private static Singleton uniqueInstance;

  private Singleton() {

  }

  public static Singleton getInstance() {
    if (uniqueInstance == null) {
      uniqueInstance = new Singleton();
    }
    return uniqueInstance;
  }
}

双重检查加锁:(线程安全)

public class Singleton {
  private volatile static Singleton uniqueInstance;

  private Singleton() {

  }

  public static Singleton getInstance() {
    if (uniqueInstance == null) {
      synchronized (Singleton.class) {
        if (uniqueInstance == null) {
          uniqueInstance = new Singleton();
        }
      }
    }
    return uniqueInstance;
  }
}

要点:

  1、单例模式确保程序中一个类最多只有一个实例

  2、单例模式也提供访问这个实例的全局点

  3、在Java中实现单例模式需要私有的构造器,一个静态方法和一个静态变量

  4、确定在性能和资源上的限制,然后小心地选择适当的方案来实现单例,以解决多线程的问题

  5、如果不是采用第五的Java2,双重检查加锁实现会失效

  6、小心,你如果使用多个类加载器,可能导致单例失效而产生多个实例

  7、如果使用JVM1.2或之前的版本,你必须建立单例注册表,以免垃圾收集器将单例回收

原文地址:https://www.cnblogs.com/stanljj/p/6985677.html