首页 > 试题广场 >

写出两种Singleton(单例模式)的实现代码,并说明其特

[问答题]

写出两种Singleton(单例模式)的实现代码,并说明其特点

(1)DCL双检查锁机制
//使用双检查锁机功能,成功地解决了“懒汉模式”遇到多线程的问题。DCL也是大多数多线程结合单例模式使用的解决方案。
public class Singleton {
    private volatile static Singleton uniqueInstance;
    
    private Singleton(){
    }
    
    public static Singleton getInstance() {
        if(uniqueInstance == null) {
            synchronized (Singleton.class) {
                if(uniqueInstance == null) {
                    uniqueInstance = new Singleton();
                }
            }
        }

        return uniqueInstance;
    }
}

(2)静态内部类方式
//只用通过显式调用getInstance()方法时,才会显式装载SingletonHandler类,从而实例化uniqueInstance(只用第一次使用这个单例的实例的时候才加载,同时不会有线程安全问题)。
public class Singleton {
    private static class SingletonHandler {
        private static final Singleton uniqueInstance = new Singleton();
    }

    private Singleton(){
    }
    
    public static Singleton getInstance() {
        return SingletonHandler.uniqueInstance;
    }
}


发表于 2019-05-31 14:31:00 回复(0)
//1.饿汉模式
public class Singleton1{
    private static Singleton1 a = new Singleton1();
    public static Singleton1 getSingleton1(){
           retrun a;
        }
}
//2.懒汉模式
public class Singleton2{
    private static Singleton2 a ;
    public static Singleton2 getSingleton2(){
            if(a==null){
                a = new Singleton2();
            }
           retrun a;
        }
}
饿汉模式是线程安全的而懒汉模式存在安全问题,如需解决需添加双重检查锁机制
发表于 2019-05-30 11:44:25 回复(0)