单例3种实现

懒汉式

public class Singleton {
    private static Singleton singleton;
    private Singleton() {}  //此类不能被实例化
    public static synchronized Singleton getInstance() {
        if (singleton == null) {
            singleton = new Singleton();
        }
        return singleton;
    }
}

优点:延迟加载
缺点:加锁,影响性能

懒汉式dcl

public class Singleton {
    private static volatile Singleton singleton;
    private Singleton() {}  //此类不能被实例化
    public static Singleton getInstance() {
        if (singleton == null) {
            synchronized (Singleton.class) {
                singleton = new Singleton();
            }
        }
        return singleton;
    }
}

用synchronized和volatile加锁,影响性能

饿汉式

public class Singleton {
    private static Singleton singleton = new Singleton();
    private Singleton() {}  //此类不能被实例化
    public static Singleton getInstance() {
        return singleton;
    }
}

类加载时,就要初始化静态变量,对象初始化比较复杂,会导致程序初始化缓慢

静态内部类

public class Singleton {
    private Singleton() {}  //此类不能被实例化
    private static class SingletonHolder {
        private static final Singleton SINGLETON = new Singleton();
    }
    public static Singleton getInstance() {
        return SingletonHolder.SINGLETON;
    }
}

类加载时,不会加载内部类,做到了延时加载

猜你喜欢

转载自blog.csdn.net/mingwulipo/article/details/88420477
今日推荐