1
這是正確的:擁有或不擁有單身人士=懶惰與渴望初始化?
- 使用singleton with a holder給人慵懶的初始化,因爲當運行
Singleton.getInstance()
類SingletonHolder
只初始化。這依賴於SingletonHolder
只有在Singleton.getInstance()
內引用。它是線程安全的,因爲類加載器負責同步。 - 使用沒有持有人單身渴望初始化,因爲一旦如Java遇到代碼引用
Singleton
,其所有的靜態字段都解決了。它也是線程安全的,因爲類加載器負責同步。
辛格爾頓有支架。
public class Singleton {
private static class SingletonHolder {
private static final Singleton INSTANCE = new Singleton();
}
public static Singleton getInstance() {
return SingletonHolder.INSTANCE;
}
private Singleton(){ }
}
沒有持有人的單身人士。
public class Singleton{
private static final Singleton INSTANCE = new Singleton();
public static Singleton getInstance(){
return INSTANCE;
}
private Singleton(){ }
}
響應@揚的建議,認爲這是What is an efficient way to implement a singleton pattern in Java?重複更新。我不同意。我不是在問最好的方法是什麼:我只是問是什麼讓這兩個特定的實現是懶惰還是急於加載。像xyz's這樣的答案廣泛地解決了懶惰和渴望的問題,但並不是通過對比我試圖研究的兩個例子(或者使用相同的關鍵詞,這是爲什麼它從未在我的初始搜索中出現)。
是的,這是正確的。 –
有多種方式來實現單身人士,lazy/eager取決於你的實現。 http://stackoverflow.com/a/16580366/705773可能會有所幫助。 – xyz
[在Java中實現單例模式的有效方法是什麼?](http://stackoverflow.com/questions/70689/what-is-an-efficient-way-to-implement-a-singleton- pattern-in-java) – Jan