Java 单例最佳实践

2017-10-18  本文已影响51人  段子周

网上关于Java单例模式的讨论和探究已经远超出它本来产生的价值,这篇文章用来记录需要单例时的best practice.

饿汉单例

99%的情况下你都不需要懒汉单例(延迟初始化)

饿汉代码(JVM 类加载机制保证单例)

public class MySingleton {

    private static final MySingleton instance = new MySingleton();

    private MySingleton() {}

    public static MySingleton getInstance() {
        return instance;
    }
}

还是需要延迟加载?

Initialization-on-demand holder idiom 单例 (JVM加载机制保证单例)

public class MyHolderSingleton {

    private static final class Holder {
        private static final MyHolderSingleton instance = new MyHolderSingleton();
    }

    private MyHolderSingleton(){}

    public static MyHolderSingleton getInstance() {
        return Holder.instance;
    }
}

References

上面两种做法已经是基本可能需要场景的单例做法了,理解并记住他们,从此不再看单例了。
如果除了最佳实践,还需要探究单例的所有可能问题和原理,参看下表:

上一篇下一篇

猜你喜欢

热点阅读