-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/

Предоставляет ли последний подход какие-либо преимущества, которых нет у первого?

Ответы на вопрос(3)

Ваш ответ на вопрос