静的初期化を使用してスレッドセーフなシングルトンを実装する場合、Initialize-On-Demand イディオムは本当に必要ですか、それともインスタンスの単純な静的宣言で十分でしょうか?
静的フィールドとしてのインスタンスの簡単な宣言:
class Singleton
{
private static Singleton instance=new Singleton();
private Singleton () {..}
public static Singleton getInstance()
{
return instance;
}
}
対
class Singleton {
static class SingletonHolder {
static final Singleton INSTANCE = new Singleton();
}
private Singleton () {..}
public static Singleton getInstance() {
return SingletonHolder.INSTANCE;
}
}
Brian Goetz がこの記事で最初のアプローチを推奨しているため、私はこれを尋ねます。
http://www.ibm.com/developerworks/java/library/j-dcl/index.html
この記事では後者を提案していますが、
http://www.ibm.com/developerworks/library/j-jtp03304/
後者のアプローチには、前者にはない利点がありますか?