我使用惰性实例化单例模式遇到了一些问题
参考:http ://www.cs.umd.edu/~pugh/java/memoryModel/DoubleCheckedLocking.html 。
同样,使用早期实例化的单例模式有什么问题吗?
我使用惰性实例化单例模式遇到了一些问题
参考:http ://www.cs.umd.edu/~pugh/java/memoryModel/DoubleCheckedLocking.html 。
同样,使用早期实例化的单例模式有什么问题吗?
这是大约十年前写的。自 2004 年以来,最简单的单例模式是使用enum
, 和一个实例。
enum Singleton {
INSTANCE;
}
这个想法似乎是实例化单例可能代价高昂,因此如果提早完成(可能对于很多单例),它可能会在应用程序启动时导致长时间的停顿,而惰性实例化会分散延迟并可能避免它们完全如果并不总是需要单身人士。
对于大量应用程序来说,这真的是一个问题吗?我很确定它不是,关于延迟实例化的单例的博客文章和问题的数量与它的实际用途完全不成比例。我同样确信所有这些关注给了很多人这样的印象,即这就是必须实现单例的方式,并导致他们在直接的半急切实例化单例本来可以很好的地方选择一种不必要的复杂解决方案。
那么为什么这个问题会受到如此多的关注呢?我怀疑这部分是因为它说明了 Java 内存模型的一些更精细的点,这些点通常与并发代码相关,部分是智能游戏。