懒汉模式
public class SingleInstance{
private static SingleInstance instance;
private SingleInstance(){
}
public static SingleInstance getInstance(){
if(null==instance){
instance=new SingleInstance();
}
return instance;
}
}
优点
可以延迟加载
缺点
多线程不安全
饿汉模式
public class SingleInstance{
private static SingleInstance instance=new SingleInstance();
private SingleInstance(){}
public static SingleInstance getInstance(){
return instance;
}
}
优点
多线程安全
缺点
加载类时就初始化完成,无法延时加载
双重检查
public class SingleInstance{
private static SingleInstance instance;
private SingleInstance(){
}
public static SingleInstance getInstance(){
if(null==instance){
synchronized(SingleInstance.class){
if(null==instance){
instance=new SingleInstance();
}
}
}
return instance;
}
}
优点
多线程安全
延迟加载
缺点
同步耗时
静态内部类
public class SingleInstance{
private SingleInstance(){
}
public static SingleInstance getInstance(){
return InstanceHelper.instance;
}
private class InstanceHelper(){
private static SingleInstance instance=new SingleInstance();
}
}
优点
多线程安全
延迟加载
耗时短(与双重检查相比)
用缓存实现
public class SingleInstance{
private static final String KEY="instance";
private static Map<String,SingleInstance> map=new HaspMap<>();
private SingleInstance(){
}
public static SingleInstance getInstance(){
SingleInstance instance;
if(null==map.get(KEY){
instance=new SingleInstance();
map.put(KEY,instance);
}else{
instance=map.get(KEY);
}
return instance;
}
}
优点
线程安全
缺点
占用内存较大