如果不是高并发,出于效率考虑推荐使用如下两种单例模式的写法。
1、两次判空实现单例
优点:资源利用率高,效率高。缺点:第一次加载时反应稍慢,由于JAVA内存模型的原因偶尔会失败。
public class Singleton {
private static Singleton instance=null;
//私有构造方法
private Singleton(){
}
public static Singleton getInstance(){
if(null==instance){
synchronized (Singleton.class){
if(null==instance){
instance=new Singleton();
}
}
}
return instance;
}
}
2、静态内部类实现单例
优点:可以确保线程安全,也能够保证单例对象的唯一性,同时延迟了单例的实例化。
public class Singleton {
//私有构造方法
private Singleton(){
}
public static Singleton getInstance(){
return SingletonHolder.instance;
}
private static class SingletonHolder{
private static final Singleton instance=new Singleton();
}
}