-dg
вительно ли идиома 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;
}
}
Я спрашиваю об этом, потому что Брайан Гетц рекомендует первый подход в этой статье:
http://www.ibm.com/developerworks/java/library/j-dcl/index.html
в то время как он предлагает последнее в этой статье
http://www.ibm.com/developerworks/library/j-jtp03304/
Предоставляет ли последний подход какие-либо преимущества, которых нет у первого?