如果不是高并發(fā),出于效率考慮推薦使用如下兩種單例模式的寫法棒动。
1、兩次判空實(shí)現(xiàn)單例
優(yōu)點(diǎn):資源利用率高,效率高吠昭。缺點(diǎn):第一次加載時(shí)反應(yīng)稍慢,由于JAVA內(nèi)存模型的原因偶爾會(huì)失敗趣惠。
public class Singleton {
private static Singleton instance=null;
//私有構(gòu)造方法
private Singleton(){
}
public static Singleton getInstance(){
if(null==instance){
synchronized (Singleton.class){
if(null==instance){
instance=new Singleton();
}
}
}
return instance;
}
}
2畏浆、靜態(tài)內(nèi)部類實(shí)現(xiàn)單例
優(yōu)點(diǎn):可以確保線程安全,也能夠保證單例對(duì)象的唯一性烦秩,同時(shí)延遲了單例的實(shí)例化垮斯。
public class Singleton {
//私有構(gòu)造方法
private Singleton(){
}
public static Singleton getInstance(){
return SingletonHolder.instance;
}
private static class SingletonHolder{
private static final Singleton instance=new Singleton();
}
}