单例模式代码实现

47 阅读1分钟

懒汉式单例模式 (线程不安全)

懒汉式单例模式在第一次使用时才创建实例,以延迟加载的方式实现单例。

public class Singleton {
    // 懒汉式
    private static Singleton singleton ;
    private Singleton(){}
    public static Singleton get(){
        if(singleton==null){
            singleton = new Singleton();
        }
        return singleton;
    }
}

饿汉式单例模式 (线程安全)

饿汉式单例模式在类加载时即创建实例,以空间换时间的方式实现单例。

public class Singleton {

    // 类加载时即创建唯一实例
    private static Singleton instance = new Singleton();

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

    // 公共静态方法,返回唯一实例
    public static Singleton getInstance() {
        return instance;
    }
}

懒汉式单例模式 (线程安全,同步方法)

public class Singleton { 
    private static Singleton instance; 
    private Singleton() {}
    public static synchronized Singleton getInstance() { 
        if (instance == null) { 
            instance = new Singleton(); 
        } 
        return instance; 
     } 
}

懒汉式单例模式 (线程安全,DCL方法)

public class Singleton { 
    // 注意:必须使用 volatile 
    private static volatile Singleton instance; 
    private Singleton() {} 
    public static Singleton getInstance() { 
        // 第一次检查,避免不必要的同步 
           if (instance == null) { 
               synchronized (Singleton.class) { 
                   // 第二次检查,避免多个线程同时通过第一次检查 
                       if (instance == null) { 
                           instance = new Singleton(); 
                           } } } 
                       return instance; 
                       }
 }