Patrón de diseño singleton y patrón de diseño de agente dinámico

problema resuelto

Solo debe haber un objeto en un ámbito de aplicación y una clase.

Características del patrón de diseño de una sola columna

1. Construya un objeto privado (no se puede crear un objeto nuevo por medios normales, porque se puede llamar en un método privado a través de la reflexión)
2. Variables miembro estáticas (almacenar una referencia a un objeto de una sola columna)
3. Proporcionar un acceso estático público método para obtener un objeto de una sola columna

Dos caminos

Estilo de hombre perezoso: habrá problemas de seguridad en los hilos (esta es la entrevista más frecuente)
Estilo de hombre hambriento: no hay problemas de seguridad en los hilos

La diferencia entre el hombre hambriento y el perezoso

El estilo chino hambriento consiste en crear el objeto independientemente de si lo usas o no.
——Será una pérdida de recursos.
-Al crear un objeto, no habrá subprocesos múltiples.
Inserte la descripción de la imagen aquí
Estilo de hombre perezoso, solo se creará la primera vez que lo visite.
——También se llama carga diferida, porque cuando se carga, habrá acceso multiproceso, además de que hay variables miembro en la clase a la que se accede.
Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí

Escritura normativa común en modo singleton

1. Cerradura de doble verificación (DCL) + volátil
2. Clase interna estática

¿Cuándo se crea el objeto de una sola columna del modo de hombre hambriento?
Cuando se inicializa la clase correspondiente al objeto singleton, ¡se creará el objeto singleton! !
¿Cuáles son los tiempos de inicialización de la clase? A través de New Student, a través del acceso a variables miembro estáticas. .

Cuando la JVM carga una clase, la JVM bloquea el subproceso que carga la clase, es decir, es seguro para subprocesos cuando la clase está cargada. No habrá problemas de seguridad de subprocesos.

¿Cómo juzgar los problemas de seguridad de los hilos?
1: si hay subprocesos múltiples es
2: si hay datos compartidos es
3: si hay una operación no atómica (para instrucciones de código de bytes)

Comprensión atómica

new Student (); i ++;
¿Es una operación atómica? No

¿Cómo asegurar la atomicidad? Cerrar con llave

El primer rol de volátil: puede deshabilitar el caché de la CPU o la memoria de trabajo

Comprensión de la visibilidad: comprensión
Inserte la descripción de la imagen aquí
ordenada:
int x; booleano a;
x = 20; paso3 a = falso; paso4
No hay dependencia entre x y a (si hay una relación de sucedido antes),
por lo que JVM considerará Para problemas de rendimiento, Es posible reordenar las instrucciones en el paso 3 y el paso 4.

int x = 10; int y;
y = x + 10;

Supongo que te gusta

Origin blog.csdn.net/yang13676084606/article/details/107418733
Recomendado
Clasificación