[设计模式] 单例模式
一、不使用锁的单例模式
public class Singleton{
private Singleton singleton = new Singleton();
private Singleton(){}
public Singleton getInstance(){
return singleton;
}
}
这样可以保持只有一个实例,这在某些情况下是合理的,比如某一个多线程的软件,整个软件只需要一个配置文件,所以只需要一个管理配置的类的实例即可
二、上面的单例实现实际上在实际当中会出现问题,比如如果这样的单例类在系统当中非常多,那么会造成在加载的时候系统启动非常慢,但是有的单例根部不会用,所以使用静态类的方式不是非常合理的,可以在使用的时候在进行对象的创建,也就是延迟加载。
public class Singleton{
private Singleton singleton = null;
private Singleton(){}
public Singleton synchronized getInstance(){
if(singleton == null){
singleton = new Singleton();
}
return singleton;
}
}
三、
双重枷锁方式,可以在一定程度上减少加锁带来的性能的下降!
public class Singleton{
private Singleton singleton = null;
private Singleton(){}
public Singleton synchronized getInstance(){
if(singleton == null){
synchronized(){
if(singleton==null) singleton = new Singleton();
}
}
return singleton;
}
}