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