对于单例设计模式,人们应该更喜欢什么。
1)make whole getInstance() method synchronized
OR
2)make only critical section synchronized.
应该采取什么方法,为什么?
最佳答案
首先,尝试考虑您是否需要惰性实例化。如果不是,则不涉及同步,因为您的 INSTANCE
将在类加载时初始化。
如果您确实需要延迟初始化您的实例,那么不要使getInstance
同步,因为这会导致您的所有线程无缘无故地相互等待一次实例已初始化。
如果您要在内部使用同步块(synchronized block),则需要仔细检查是否为 null(在同步块(synchronized block)的外部和内部)以确保您最终只有一个实例;此外,您需要您的实例是 volatile
。
最佳实践方法是拥有一个私有(private)嵌套类 SingletonHolder
,它在加载时初始化您的单例实例(但仅在 getInstance()
时加载)调用容器类)。
但是,如果您不需要惰性实例化,最好的做法是使用具有一个常量的枚举。
长话短说,我想您会在这里找到所有内容:http://en.wikipedia.org/wiki/Singleton_pattern
关于c# - 单例, 临界区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12075451/