设计模式之单例模式(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,这两个线程只能进入一个,另一个在外边排队等候,必须要其中一个进去出来后,另一个才可以进入。而此时如果没有了第二重加锁,则第一个线程创建了实例,而第二个还是可以继续创建新的实例,就没有达到单例的目的。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值