Creo que todos ya están familiarizados con el modelo Singleton, y sus métodos de implementación generalmente se dividen en los siguientes dos tipos:
La copia del código es la siguiente:
// implementación perezosa
Singleton de clase pública {
Instancia privada de Singleton Singleton = NULL;
Singleton privado () {}
public static newInstance () {
if (null == instancia) {
instancia = new Singleton ();
}
instancia de retorno;
}
public void dosomething () {
// Haz algo ...
}
}
// estilo chino hambriento
Singleton de clase pública {
Instancia privada de Singleton Singleton = new Singleton ();
Singleton privado () {}
public static singleton newinstance () {
instancia de retorno;
}
public void dosomething () {
// Haz algo ...
}
}
En el uso del modo de interés único, el estilo perezoso y hambriento tiene diferentes escenarios de aplicación. Para usarlo solo cuando se inicie el proyecto, se creará.
En los dos modos anteriores, si está multiprocesado, no habrá problemas con el estilo del hombre hambriento, porque el JVM solo cargará la clase de interés único una vez, pero el estilo de hombre perezoso puede tener el problema de crear repetidamente un solo interés Objetos, que es que el hilo no es seguro.
Entonces, ¿hay alguna manera de hacer el modo de interés único de hambriento de estilo hilado de hilo? Ciertamente hay cualquier respuesta. En muchos casos, el JVM nos ha proporcionado control de sincronización, como:
a. Datos inicializados en el bloque estático {}
b. Al acceder al campo final, etc.
Cuando el JVM está cargando la clase, asegurará que los datos se sincronizen.
Use clases internas de nivel de clase para crear instancias de objetos en esta clase interna. De esta manera, siempre que no use clases internas de nivel de clase, no creará instancias de objetos, lo que logrará la carga perezosa y la seguridad de los hilos.
La copia del código es la siguiente:
Singleton de clase pública {
// Clase interna, el objeto de interés simple se creará solo cuando la clase interna esté cargada
Singletonholder de clase estática privada {
Public static singleton instancia = new Singleton ();
}
Singleton privado () {}
public static singleton newinstance () {
devolución singletonholder.Instance;
}
public void dosomething () {
// Haz algo
}
}
Esto puede darse cuenta del modelo de precio único ausente de hilo.
Además, también podemos implementar el modo de interés único a través de los tipos de enumeración, que también es una forma más recomendada.
Implementar un patrón Singleton usando tipos de enumes es el siguiente:
La copia del código es la siguiente:
Public Enum Singleton {
// Defina un elemento enumerado, es una instancia de singleton
instancia;
public void dosomething () {
// Haz algo ...
}
}
Ok, el modo Singleton se introduce aquí.