本文共 3482 字,大约阅读时间需要 11 分钟。
在之前的博文中曾经介绍过单例模式:
https://blog.csdn.net/timchen525/article/details/78244101
这里重新讨论们下单例模式,并且引入了一个基于枚举的单例模式。
** * 懒汉模式 */public class SingletonExample { // 私有构造函数 private SingletonExample() { } // 单例对象 private static SingletonExample instance = null; // 静态的工厂方法 public static SingletonExample getInstance() { if (null == instance) { instance = new SingletonExample(); } return instance; }}
public class SingletonExample { // 私有构造函数 private SingletonExample() { } // 单例对象 private static SingletonExample instance = null; // 静态的工厂方法 public static synchronized SingletonExample getInstance() { if (null == instance) { instance = new SingletonExample(); } return instance; }}
public class SingletonExample { // 私有构造函数 private SingletonExample() { } // 单例对象 private static SingletonExample instance = null; // 静态的工厂方法 public static SingletonExample getInstance() { if (null == instance) { // B synchronized (SingletonExample.class) { if (null == instance) { // 双重检测机制 instance = new SingletonExample(); // A-3 } } } return instance; }}
public class SingletonExample { // 私有构造函数 private SingletonExample() { } // 单例对象 private volatile static SingletonExample instance = null; // 静态的工厂方法 public static SingletonExample getInstance() { if (null == instance) { synchronized (SingletonExample.class) { if (null == instance) { instance = new SingletonExample(); } } } return instance; }}
public class SingletonExample { // 私有构造函数 private SingletonExample() { } // 单例对象 private static SingletonExample instance = new SingletonExample(); // 静态的工厂方法 public static SingletonExample getInstance() { return instance; }}
public class SingletonExample { // 私有构造函数 private SingletonExample() { } public static SingletonExample getInstance() { return Singleton.INSTANCE.getInstance(); } private enum Singleton { INSTANCE; private SingletonExample singletonExample; // JVM保证这个方法绝对只调用一次 Singleton() { singletonExample = new SingletonExample(); } public SingletonExample getInstance() { return singletonExample; } }}