设计模式--单例模式

设计单例模式:

单例设计模式主要有两点:

1.延迟初始化,当具体使用时,才实例化对象

2.多线程安全  多线程情况下保证对象是单例的

具体实现方式主要有以下两种:

1.双重检查加锁机制

public class Singleton {
	private static volatile Singleton s;
	//私有构造方法
	private Singleton(){}
	//双重检查加锁
	public static Singleton getSingleton(){
		if(s==null){
			synchronized (Singleton.class) {
				if(s==null){
					//new Singleton() 若不加锁,则此步骤容易发生指令重排序
					s = new Singleton();
				}
			}
		}
		return s;
	}
}

2.静态内部类

public class Singleton {
	//私有构造方法
	private Singleton(){}
	//双重检查加锁
	public static Singleton getSingleton(){
		return InnerSingleton.s;
	}
	private static class InnerSingleton{
		private static Singleton s = new Singleton();
	}
}

Spring中单例模式的使用:

AbstractBeanFactory类getBean方法

DefaultSingletonBeanRegistry类中,单例缓存

private final Map<String, Object> singletonObjects = new ConcurrentHashMap<String, Object>(64);

如果缓存中有从缓存中取,若没有则使用创建工厂来创建其中单例缓存,单例创建工厂缓存,早期单例缓存(主要解决循环依赖)

 

可有不同的ObjectFactory来产生不同类型的Bean

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值