现在的位置: 首页 > 综合 > 正文

单例模式

2018年09月29日 ⁄ 综合 ⁄ 共 958字 ⁄ 字号 评论关闭

什么是单例模式?

单例模式(Singleton),保证一个类仅有一个实例,并提供一个访问它的全局访问点。通常我们可以让一个全局变量使得一个对象被访问,但它不能防止你实例化多个对象,一个

最好的办法是,让类自身负责保存它的唯一实例。这个类可以保证没有其它实例可以被创建,并且它可以提供一个访问该实例的方法。

单例模式解决了什么问题?

1.全局访问:外界不能通过new来实例化该变量,但是我们又要提供一个方法使得外界可以得到该实例;

2.实例化控制:实例化仅由该类自己控制,而不需要调用这个类的那部分控制;

简单来说就是对唯一实例的受控访问。

饿汉模式

public class Singleton {
	private Singleton(){
	}
	private static final Singleton instance = new Singleton();
	public static Singleton getInstance(){
		return instance;
	}
}

懒汉模式

public class Singleton {
	private Singleton(){
	}
	private static Singleton instance = null;
	public synchronized static Singleton getInstance(){
		if(instance == null)
			instance = new Singleton();
		return instance;
	}
}

双重锁定(Double-Check Locking)

public class Singleton {
	private Singleton(){
	}
	private static Singleton instance = null;
	public static Singleton getInstance(){
		if(instance == null){
			synchronized (Singleton.class) {
				if(instance == null)
					instance = new Singleton();				
			}
		}
		return instance;
	}
}

当两个线程同时进入getInstance时,如果instance为null,那么由于锁机制,两个线程只有一个进入,另一个在外边排队等候,必须其中一个进入并出来后,另一个才能进入。

如果没有第二层的判断,那么最后就会创建两个实例。

【上篇】
【下篇】

抱歉!评论已关闭.