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或之前的版本,你必须建立单例注册表,以免垃圾收集器将单例回收

posted @ 2017-06-11 17:15  stanljj  阅读(101)  评论(0编辑  收藏  举报