Java 实现四种单例(都是线程安全)

前言

单例分为饿汉式和懒汉式:

饿汉式:类加载时就被创建,一种实现

懒汉式:只有需要的时候才创建,三种实现(synchronized 在方法上,synchronized 在代码块上,静态内部类)

Coding

//懒汉式单例,方法上使用 synchronized 来保证现程安全
public class Singleton {
    //懒汉式
    private static Singleton instance;

    private Singleton() {
        //私有构造方法,防止外部实例化
    }

    //使⽤了同步关键字来确保线程安全, 可能会影响性能
    public static synchronized Singleton getInstance() {
        if (instance == null) {
            instance = new Singleton();
        }
        return instance;
    }
}

//在懒汉式的基础上,可以使用双重检查锁来提高性能
public class Singleton {

    private static Singleton instance;

    private Singleton() {
        //私有构造方法,防止外部实例化
    }

    //在懒汉式的基础上,可以使用双重检查锁来提高性能
    public static Singleton getInstance() {
        if (instance == null) {
            synchronized (Singleton.class) {
                if (instance == null) {
                    instance = new Singleton();
                }
            }
        }
        return instance;
    }
}

//在懒汉式的基础上,使用静态内部类,静态内部类在外部类加载时不加载
// 就算我多次调用getInstance,SingletonHolder 类也只会被加载一次(第一次调用时加载)
public class Singleton {
    // 私有构造方法,防止外部实例化
    private Singleton() {}
    // 静态内部类
    private static class SingletonHolder {
        // 静态内部类加载时创建单例实例
        private static final Singleton INSTANCE = new Singleton();
    }
    // 获取实例的方法
    public static Singleton getInstance() {
        return SingletonHolder.INSTANCE;
    }
}



//饿汉式单例
public class Singleton {
    private static final Singleton instance = new Singleton();
    private Singleton(){
        //私有构造方法,防止外部实例化
    }
    public static Singleton getInstance(){
        return instance;
    }
}

你可能感兴趣的:(java,开发语言)