Java單例模式及延遲載入
阿新 • • 發佈:2019-02-16
單例模式是 軟體開發中非常重要的模式之一。絕大多數的軟體專案中都會用到單例模式。單例模式應用的好與壞在高併發訪問的情況下效能差異較為明顯。下面我們來看一下單例模式的具體解釋。
描述:單例模式許多時候是一個全域性的靜態共享物件,為了保證其效能,它應該是無鎖的。
下面我們來看一下具體的實現
基本實現方式:
該方式的問題是無法控制物件的載入時間。該寫法在程式啟動時就已經載入物件了。
public class Singleton {
private static Singleton inst = new Singleton();
private Singleton() {
}
public static Singleton getInstance() {
return inst;
}
}
第二種方式(不推薦):
這種方式雖能實現延遲載入但是效能很差。這種方式有時會用來定製產生N個例項。
public class Singleton {
private static Singleton inst; private Singleton() { } public static synchronized Singleton getInstance() { if(inst == null) inst = new Singleton(); return inst; }
}
第三種方式(推薦):
效能最好的一種實現方式,系統啟動時內部類是不會載入的。但當內部類第一次被呼叫時,則會成功初始化例項。
public class Singleton {
private Singleton() {
}
private static class SingletonHolder {
private static final Singleton inst = new Singleton();
}
public static Singleton getInstance() {
return SingletonHolder.inst;
}
}