单身,关键部分

Ama*_*war 3 c# java design-patterns

在Singleton Design Pattern的情况下,应该更喜欢什么.

1)make whole getInstance() method synchronized 
OR
2)make only critical section synchronized.
Run Code Online (Sandbox Code Playgroud)

什么应该是一个人的方法,为什么?

Cos*_*atu 5

首先,尝试考虑是否需要延迟实例化.如果没有,则不会涉及同步,因为您INSTANCE将在类加载时初始化.

如果你确实需要懒洋洋地初始化您的实例,那么就不会使getInstance同步的,因为这会导致所有的线程等待对方无故一旦初始化实例.

如果您将在内部使用synchronized块,则需要仔细检查null(同步块的内部和内部)以确保最终只有一个实例; 另外,你需要你的实例volatile.

最佳实践方法是使用一个私有嵌套类SingletonHolder,在加载时初始化单例实例(但只在getInstance()调用容器类时才加载).

但是,如果您不需要延迟实例化,最佳做法是使用带有一个常量的枚举.


长话短说,我想你会在这里找到它们:http://en.wikipedia.org/wiki/Singleton_pattern