面试官:你手写一个单例模式吧。
我:
public class Singleton {
private final static Singleton instance = new Singleton();
private Singleton(){}
public static Singleton getInstance(){
return s;
}
}
面试官:很好,那这是饿汉式还是懒汉式啊?
我心想,能写出来不就完了,分清懒汉饿汉有啥用啊?
我:这是饿汉式。懒汉式用了懒加载,不会在静态变量声明的时候new。而是在需要用到的时候再初始化。
面试官:嗯,懒汉式有什么问题,还有没有更优雅的单例呢?
正中下怀,小爷我知道9种单例写法。
我:懒加载有线程安全的问题,一般都使用双重判空的方式解决。而这种写法既丑陋也不优雅。可以使用内部类,利用类加载机制,把需要单例的对象声明在内部类中。
public class Singleton {
private Singleton() {}
private static class SingletonInstance {
private static final Singleton INSTANCE = new Singleton();
}
public static Singleton getInstance() {
return SingletonInstance.INSTANCE;
}
}
面试官:嗯。