单例模式

87 阅读1分钟

1. 单例模式第一式:饿汉式

特点:

  1. 预加载技术。也就是说系统启动后,单例对象就已经创建完毕
  2. EagerSingleton的构造函数,是private修饰的。(防止使用new关键字来创建一个新的实例)
  3. 线程安全
/**
 * 饿汉式单例,非懒加载
 *
 * 以空间换时间
 *
 * 线程安全
 */
public class EagerSingleton {

    // 注意:类被加载的时候初始化实例
    private static EagerSingleton instance = new EagerSingleton();

    // 注意:private类型的构造函数,保证其他对象不能直接new一个该对象的实例
    private EagerSingleton() {
    }

    public static EagerSingleton getInstance() {
        return instance;
    }
}

2. 单例模式第二式:懒汉式

特点:

  1. 懒汉式单例在类加载时不进行实例化,而是使用者第一次调用getInstance方法时进行实例化。
  2. 延迟加载技术可以提高系统启动速度,是系统开发中一种常见的资源利用效率提高方法。
  3. 为了防止多个线程同时调用getInstance方法,需要在该方法前面增加关键字synchronized进行线程访问锁定。(在高并发场景下,对系统性能有较大负面影响)
/**
 * 懒汉式单例,实现懒加载
 *
 * 线程安全
 */
public class LazySingleton {

    private static LazySingleton instance = null;

    //注意:private类型的构造函数,保证其它类对象不能直接new一个该对象的实例。
    private LazySingleton() {
    }

    /**
     * 注意 synchronized
     */
    public static synchronized LazySingleton getInstance(){
        if(instance == null){
            instance = new LazySingleton();
        }
        return instance;
    }
}

3. 单例模式第三式:双重检查锁定式

4. 单例模式第四式:静态内部类实现式

5. 单例模式第五式:枚举式

6. 单例模式第六式:单例注册表式