Как я должен идеально написать Singleton и потокобезопасный класс без использования какой-либо синхронизации - PullRequest
0 голосов
/ 05 июня 2018

Я пытался написать класс Singleton, используя готовую загрузку, см. Мое решение ниже.Я сделал конструктор приватным, чтобы предотвратить доступ, и поле члена тоже приватным, так что к нему нельзя получить доступ вне области видимости класса.

public class Test  {

    private static Test t = new Test();

    private Test() {

    }

    public static Test getInstance() {
        return t;
    }

}

Итак, безопасен ли этот кусок потока, учитывая все сценарии?

1 Ответ

0 голосов
/ 05 июня 2018

использовать шаблон enum singleton:

public enum xxton {
  INSTANCE;
}

Поскольку Шаблон Singleton подразумевает наличие частного конструктора и вызов некоторого метода для управления экземплярами (например, некоторые getInstance) в Enumsу нас уже есть неявный закрытый конструктор.

Я точно не знаю, как JVM или какой-то контейнер контролирует экземпляры нашего Enums, но, похоже,он уже использует неявный Singleton Pattern, разница в том, что мы не называем getInstance, мы просто называем Enum.В более общем смысле вы можете предоставить метод readResolve(), например, так:

protected Object readResolve() {
  return myInstance;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...