单立模式 - 确保一个类只有一个实例,并提供全局访问点
一:
- 同步getInstance方法
缺点:如果频繁调用getInstance,同步会导致代码执行效率下降100倍,而且当uniqueInstance已经被实例化的时候,同步显得累赘。
public class Singleton{
private static Singleton uniqueInstance;
private Singleton(){} //私有构造器
// 通过增加synchronized 关键字保证只实例一次 Singleton
public static synchronized Singleton getInstance(){
if(uniqueInstance == null){
uniqueInstance = new Singleton();
}
return uniqueInstance;
}
}
二:
- “急切”创建模式
缺点:在程序启动时就创建,如果长时间不使用该类,就会长时间占用内存。
public class Singleton{
private static Singleton uniqueInstance = new Singleton();;
private Singleton(){} //私有构造器
public static Singleton getInstance(){
return uniqueInstance;
}
}
三:
- 双重检查加锁模式,在genInstance方法中减少同步次数
public class Singleton{
private static Singleton uniqueInstance;
private Singleton(){} //私有构造器
public static Singleton getInstance(){
if(uniqueInstance == null){
synchronized (Singleton.class){
if(uniqueInstance == null){
uniqueInstance = new Singleton();
}
}
}
return uniqueInstance;
}
}
- 最后附上两图