单例模式总结
单例模式的使用有一个必要的条件,在一个系统要求一个类只有一个实例时才应当使用单例模式。
在懒汉式单例的时候为什么要进行线程的控制呢?
package 单例模式.懒汉模式;
public class LazySingleton {
?private static LazySingleton m_instance;
?private LazySingleton(){}
?synchronized public LazySingleton getInstance()
?{
??if(m_instance == null)
??{
???m_instance = new LazySingleton();
??}
??return m_instance;
?}
}
分析这个例子,如果在多线程的环境中,A和B同时调用该方法,A进入到?if(m_instance == null)然后开始new LazySingleton();的时候,B开始到if(m_instance == null)发现对象也是NULL,那么B也开始产生对象。这样产生了多个实例。所以要在方法的开始加上线程控制,这样就保证A和B不会同时产生实例。