设计模式之单例模式(Singleton)

来源《大话设计模式》

设计模式之单例模式(Singleton):

保证一个类仅有一个实例,并提供一个访问它的全局访问点

源代码,实现多线程时加锁

class Singleton{
	private static Singleton instance;
	private static Object sysRoot = new Object();
	//私有的构造函数
	private Singleton(){}
	
	public static Singleton getInstance(){
		//双重加锁
		if(instance == null){
			synchronized (sysRoot) {
				if(instance == null){
					instance = new Singleton();
				}
			}
		}
		return instance;
	}
}

为什么双重加锁?

对于instance存在的情况直接返回没有问题;当instance为null,并且同时两个线程调用getInstance()方法时,他们可以通过第一重加锁,然后由于sychronized,这两个线程只能进入一个,另一个在外边排队等候,必须要其中一个进去出来后,另一个才可以进入。而此时如果没有了第二重加锁,则第一个线程创建了实例,而第二个还是可以继续创建新的实例,就没有达到单例的目的。



你可能感兴趣的:(设计模式)