Я считаю, что все уже знакомы с моделью Синглтона, и ее методы реализации обычно делятся на следующие два типа:
Кода -копия выглядит следующим образом:
// ленивая реализация
открытый класс Singleton {
Частный статический экземпляр синглтона = null;
private singleton () {}
public static newinstance () {
if (null == encess) {
encess = new Singleton ();
}
вернуть экземпляр;
}
public void doMomething () {
// Сделай что -нибудь ...
}
}
// Голодный китайский стиль
открытый класс Singleton {
Частный статический экземпляр Singleton = new Singleton ();
private singleton () {}
public static singleton newinstance () {
вернуть экземпляр;
}
public void doMomething () {
// Сделай что -нибудь ...
}
}
При использовании режима с одним интересом Lazy и голодного стиля имеют разные сценарии применения. Чтобы использовать его.
В двух вышеупомянутых режимах, если вы многопоточно, не будет проблем с стилем голодного человека, потому что JVM будет загружать только один класс процентов только один раз, но в стиле ленивого человека может быть проблема многократного создания единого интереса. Объекты, что является тем, что поток не безопасен.
Итак, есть ли способ сделать одно интересный режим голодного в стиле человека? Конечно, есть какие -либо ответы. Во многих случаях JVM предоставил нам контроль синхронизации, например:
А.
б.
Когда JVM загружает класс, он гарантирует, что данные синхронизируются.
Используйте внутренние классы на уровне класса для создания экземпляров объектов в этом внутреннем классе. Таким образом, если вы не используете внутренние классы на уровне класса, вы не будете создавать экземпляры объектов, тем самым достигая ленивой ленивой нагрузки и безопасности потоков.
Кода -копия выглядит следующим образом:
открытый класс Singleton {
// Внутренний класс, простой объект интереса будет создан только при загрузке внутреннего класса
Частный статический класс Singletonholder {
Public Static Singleton Extance = new Singleton ();
}
private singleton () {}
public static singleton newinstance () {
return singletonholder.instance;
}
public void doMomething () {
// что -нибудь делай
}
}
Это может реализовать модель с одной ценой, защищенную потоком.
Кроме того, мы также можем реализовать режим с одним интересом посредством типов перечисления, что также является более рекомендуемым способом.
Внедрение шаблона синглтона с использованием типов перечисления следующим образом:
Кода -копия выглядит следующим образом:
public enum singleton {
// определить перечисленный элемент, это экземпляр Синглтона
пример;
public void doMomething () {
// Сделай что -нибудь ...
}
}
ОК, здесь представлен режим Синглтона.