[英]Regarding static holder singleton pattern
我已經在很多方面開發了單例,這取決於像易失性/懶惰單例,急切單例,普通單例和通過Enum這樣的條件,但具體我想知道下面所示的靜態持有者模式單例。
public static class Singleton {
private static class InstanceHolder {
public static Singleton instance = new Singleton();
}
private Singleton(){}
public static Singleton getInstance() {
return InstanceHolder.instance;
}
}
請告知在哪些條件下它是有益的,有什么好處。
這種模式至少有三個原因:
JVM推遲初始化InstanceHolder類,直到實際使用它為止,並且因為使用靜態初始化程序初始化Singleton,所以不需要額外的同步。 任何線程對getInstance的第一次調用都會導致InstanceHolder被加載和初始化,此時Singleton的初始化通過靜態初始化器發生。
靜態支架圖案也被認為是雙重檢查鎖定反模式的最明智的替代品。
這是一種通過利用JVM加載類的方式來創建線程安全的懶惰單例的方法。 您可以在Bloch的Effective Java書中詳細了解為何以及如何正確實現它。
請記住,從testable code
角度來看,單身人士(以及一般的全球狀態)並不是有益的,應該避免。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.