2018-08-17 增加线程安全的懒汉模式

单例模式即只有一个实例,实现分为懒汉模式和饿汉模式。

饿汉模式

/**
 * 单例模式_饿汉模式
 * 类加载的时候完成初始化,因此加载速度相对较慢,但运行是获取对象的速度相对较快
 * 线程安全
 * Created by zhangguoli on 09-18-018.
 * YXV0aG9yOiB6aGFuZ2d1b2xpLmNu
 */
public class HungrySingleton {

    //① 构造方法私有化,外部不可以直接创建对象
    private HungrySingleton () {

    }

    //② 创建类的唯一实例,使用private static修饰
    private static HungrySingleton instance = new HungrySingleton ();

    //③ 提供统一对外获取实例的方法
    public static HungrySingleton getInstance() {
        return instance;
    }
}

懒汉模式

/**
 * 单例模式_懒汉模式
 * 类加载时不做初始化
 * 线程不安全
 * Created by zhangguoli on 09-18-018.
 * YXV0aG9yOiB6aGFuZ2d1b2xpLmNu
 */
public class LazySingleton {

    //① 构造方法私有化
    private LazySingleton () {

    }

    //② 静态私有成员不做初始化
    private static LazySingleton instance;

    //③ 统一对外获取实例的方法
    public static LazySingleton getInstance() {
        // ④ 不存在实例的话则创建,"懒"体现在这
        if (instance == null) {
            instance = new LazySingleton ();
        }
        return instance;
    }
}

针对线程不安全的懒汉模式,可以在其获取实例时增加synchronized 以使其线程安全

线程安全的懒汉模式

public class LazySyncSingleton {

    private LazySyncSingleton() {

    }

    private static LazySyncSingleton instance;

    public static synchronized  LazySyncSingleton getInstance() {
        if (instance == null) {
            instance = new LazySyncSingleton();
        }
        return instance;
    }
}

标签: 设计模式, 单例模式

添加新评论