Acredito que todos já estejam familiarizados com o modelo Singleton, e seus métodos de implementação geralmente são divididos nos dois tipos a seguir:
A cópia do código é a seguinte:
// Implementação preguiçosa
classe pública Singleton {
Instância de singleton estática privada = nulo;
Private Singleton () {}
public static newInstance () {
if (null == instância) {
instância = new singleton ();
}
instância de retorno;
}
public void Dosomething () {
// Faça algo ...
}
}
// estilo chinês faminto
classe pública Singleton {
Instância de Singleton estático privado = new Singleton ();
Private Singleton () {}
public static singleton newInstance () {
instância de retorno;
}
public void Dosomething () {
// Faça algo ...
}
}
No uso do modo de interesse único, o estilo preguiçoso e faminto tem cenários de aplicativos diferentes. Para usá -lo.
Nos dois modos acima, se você for multithread, não haverá problemas com o estilo Hungry Man, porque a JVM só carregará a classe de interesse única uma vez, mas o estilo preguiçoso pode ter o problema de criar repetidamente interesse único Objetos, que é que o encadeamento não é seguro.
Então, existe uma maneira de fazer o modo de interesse único de fios com fios famintos à segurança do homem? Certamente existem respostas. Em muitos casos, a JVM nos forneceu controle de sincronização, como:
a.
b.
Quando a JVM está carregando a classe, garantirá que os dados sejam sincronizados.
Use classes internas de nível de classe para criar instâncias de objetos nesta classe interna. Dessa forma, desde que você não use classes internas de nível de classe, você não criará instâncias de objetos, alcançando assim o carregamento preguiçoso e a segurança da linha preguiçosa.
A cópia do código é a seguinte:
classe pública Singleton {
// Classe interna, o objeto de interesse simples será criado apenas quando a classe interna for carregada
Classe estática privada SingleToholder {
Public Static Singleton Instância = new Singleton ();
}
Private Singleton () {}
public static singleton newInstance () {
retornar singletonsholder.instance;
}
public void Dosomething () {
// Faça algo
}
}
Isso pode realizar o modelo de preço único seguro para roscas.
Além disso, também podemos implementar o modo de interesse único por meio de tipos de enumeração, o que também é uma maneira mais recomendada.
A implementação de um padrão de singleton usando tipos de enum é o seguinte:
A cópia do código é a seguinte:
public Enum Singleton {
// define um elemento enumerado, é uma instância de singleton
exemplo;
public void Dosomething () {
// Faça algo ...
}
}
OK, o modo Singleton é introduzido aqui.