Singleton模式指一个类型只能生成一个对象,且不能复制。必须满足:

  1. 构造、拷贝和解析函数都是private
  2. 需要用静态成员变量空值对象个数,保证不重复
  3. 需要有静态的构造函数和析构函数

懒汉模式

我很懒,直到第一次调用类实例时才创建一个新的该类实例
使用双检索实现

  1. public class Singleton {
  2. private static volatile Singleton singleton;
  3. private Singleton() {}
  4. public static Singleton getInstance() {
  5. if (singleton == null) { //第一次判断
  6. synchronized (Singleton.class) { //加所
  7. if (singleton == null) { //第二次判断
  8. singleton = new Singleton();
  9. }
  10. }
  11. }
  12. return singleton;
  13. }
  14. }

饿汉模式

在程序开始时创建该类的实例

  1. public class Singleton {
  2. private static Singleton singleton;
  3. static {
  4. instance = new Singleton();
  5. }
  6. private Singleton() {}
  7. public Singleton getInstance() {
  8. return singleton;
  9. }
  10. }

volatile保证线程安全

静态内部类

效果类似双检锁,但实现更简单。只适用于静态域。

  1. public class Singleton {
  2. private Singleton() {}
  3. private static Singleton getInstance() {
  4. }
  5. public static class Innerclasses {
  6. private ststic final Singleton singleton = new Singleton();
  7. };
  8. };