如果不是高併發,出於效率考慮推薦使用如下兩種單例模式的寫法。
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();
}
}