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)
什么应该是一个人的方法,为什么?
首先,尝试考虑是否需要延迟实例化.如果没有,则不会涉及同步,因为您INSTANCE将在类加载时初始化.
如果你确实需要懒洋洋地初始化您的实例,那么就不会使getInstance同步的,因为这会导致所有的线程等待对方无故一旦初始化实例.
如果您将在内部使用synchronized块,则需要仔细检查null(同步块的内部和内部)以确保最终只有一个实例; 另外,你需要你的实例volatile.
最佳实践方法是使用一个私有嵌套类SingletonHolder,在加载时初始化单例实例(但只在getInstance()调用容器类时才加载).
但是,如果您不需要延迟实例化,最佳做法是使用带有一个常量的枚举.
长话短说,我想你会在这里找到它们:http://en.wikipedia.org/wiki/Singleton_pattern