Как сделать singleton-класс ориентированным на многопотоковое исполнение?

Большинству популярных платформ JavaScript включали функции утилиты JSON. Например, jQuery имеет функцию, которая непосредственно называет URL и загружает результат JSON как объект: http://docs.jquery.com/Getjson

Однако можно получить синтаксический анализатор JSON с открытым исходным кодом и stringifier от json веб-сайт :

https://github.com/douglascrockford/JSON-js

Затем просто включайте код и используйте JSON.stringify () метод на Вашем массиве.

5
задан Kamarey 30 September 2009 в 07:41
поделиться

6 ответов

Возможно, лучший способ - использовать перечисление с одним экземпляром. Это имеет дополнительное преимущество в виде сериализации и гарантии одноэлементности против сериализации и отражения, чего не делает никакая «простая» реализация Singleton (частный? У меня есть размышления, я насмехаюсь над вашими модификаторами доступа!). Это также очень просто реализовать:

public enum Singleton {
    INSTANCE;

    // fields and methods go here
}
6
ответ дан 18 December 2019 в 07:55
поделиться

The best way to make a singleton? Use an enum.

public enum Singleton {
    INSTANCE;
    public void foo(){ ... }
}

// Usage:
Singleton.INSTANCE.foo();

You get lots of help from the VM not only to avoid double instantiation, but it also helps you avoid deserialization corruption.

11
ответ дан 18 December 2019 в 07:55
поделиться
public class Singleton {
  public static final Singleton INSTANCE = new Singleton();
  private Singleton() { ... }
}

Использование статической переменной экземпляра предпочтительнее внутреннего класса «Держатель». Если хотите, вы также можете сделать статический член закрытым и предоставить метод для доступа к нему, но все, что для этого нужно, - это добавить еще один вызов метода в стек.

2
ответ дан 18 December 2019 в 07:55
поделиться

What about lazy instanciation: getInstance() returns the singleton or create it if it is the first call.

 public class MySingleton
 {
     private static MySingleton instance;

     private MySingleton()
     {
         // construct object . . .
     }

     // For lazy initialization
     public static synchronized MySingleton getInstance()
     {
         if (instance==null)
         {
             instance = new MySingleton();
         }
         return instance;
     }

     // Remainder of class definition . . .
 } 
1
ответ дан 18 December 2019 в 07:55
поделиться

Singletons are not threadsafe per default. The common way to create a singleton is to have a factory method that handles creation of the one instance. That way you can control instance creation.

0
ответ дан 18 December 2019 в 07:55
поделиться

If you care about concurrency, you won't be using shared global state.

0
ответ дан 18 December 2019 в 07:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: