在阅读多线程时,我了解到Singleton需要将双重锁定检查和单例引用声明为易失性
我脑子里的问题是,
如果类加载是单线程的,为什么我们关心多线程问题?
静态初始化程序块恰好在应用程序生命周期中执行一次,那么为什么不使用静态初始化程序创建一个单例程序呢?
发布于 2015-07-22 05:22:46
发布于 2015-07-22 05:00:35
静态初始化程序块只发生一次,这是正确的。实际上,它很懒;只有在实际需要类时才会运行它。因此,我们可以简单而直接地静态地实例化一个对象,并为它提供一个getter。这是使用初始化随需应变的Holder成语演示的:
private static class LazySomethingHolder {
public static Something something = new Something();
}
public static Something getInstance() {
return LazySomethingHolder.something;
}有关详细信息,请参阅http://www.cs.umd.edu/~pugh/java/memoryModel/jsr-133-faq.html#dcl。该页面很好地解释了如何替代您所提到的双重锁定机制。
https://stackoverflow.com/questions/31554028
复制相似问题