初探设计模式——单件模式 与线程池、缓存、注册表、日志

**单件模式:确保一个类只有一个实例,并提供一个全局访问点 **
单例模式需要私有的构造器、一个静态方法、一个静态变量,可以避免其他类再自行产生实例,ststic使这个实例可以在全局内访问。

多线程抢占单例对象数据不同步问题
1.把getInstance()变成同步(synchronized)方法

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

同步方法会拖垮性能。

2.使用“eagerly”创建实例,而不用延迟实例化的做法
public class Singleton{
	private static Singleton uniqueInstance=new Singleton();	//访问变量前先创建实例,保证线程安全
	private Singleton(){}
	public static Singleton getInsatnce(){
		return uniqueInstance;		//直接返回
	}
}
3.“双重检查加锁”,先减产是否创建了实例,没有的话只在第一次创建时同步,减少方法同步
public class Singleton{
	private voiatil* static Singleton uniqueInstance;	
	private Singleton(){}
	public static Singleton getInsatnce(){
		if(uniqueInstancs==null){
			synchronized(Singleton.class){
				if(uniqueInstancs==null){
					uniqueInstances=new Singleton();
				}
			}
		}
		return uniqueInstances;	
	}
}

多个类加载器问题,指定
。。

发布了28 篇原创文章 · 获赞 12 · 访问量 1249

猜你喜欢

转载自blog.csdn.net/weixin_43264478/article/details/104488141