有時候务荆,我們希望JVM中只有一個類的對象挪拟。
實現(xiàn)單例(Singleton)有兩種方式。
1.餓漢式
public class Singleton {
//餓漢式(聲明實例引用即實例化)類裝載的時候?qū)嵗娣旁诜椒▍^(qū)內(nèi)(不存在線程并發(fā))
private static Singleton singleton = new Singleton();
//構(gòu)造方法私有
private void Singleton (){
}
//提供訪問點
public static Singleton getSingleton(){
return singleton;
}
}
餓漢式不存在并發(fā)的情況纯丸,但是在類加載的時候即申請內(nèi)存實例化(對于大對象來說還是比較消耗內(nèi)存)
2.懶漢式
public class Singleton {
//懶漢式(聲明實例引用不實例化,第一次調(diào)用方法時静袖,實例化)
//對于創(chuàng)建實例代價大液南,且不定會使用時,使用懶加載模式可以減少開銷
//缺點:在單線程下能保證只有一個實例勾徽,多線程下有創(chuàng)建多個實例的風(fēng)險
private static Singleton singleton = null;
private void Singleton(){
}
public static Singleton getSingleton(){
/*這種方式存在并發(fā)的情況
if(singleton!=null){
}else{
singleton = new Singleton();
}
return singleton;
*/
//只有調(diào)用getSingleton時才會裝載內(nèi)部類滑凉,才會創(chuàng)建實例(不存在線程并發(fā))
return InnerClass.INSTANCE;
}
private static class InnerClass{
private static final Singleton INSTANCE = new Singleton();
}
}