usar patron ejercicios cuando conexion como java spring spring-mvc

ejercicios - patron singleton java



¿Son seguros los hilos singleton de primavera? (8)

Quiero saber si los frijoles de primavera singleton son seguros para las roscas, si es así, ¿por qué? Si no, ¿por qué?

Como soy principiante con la primavera así se agradecería la ayuda.


si no entonces por que?

porque podría tener una referencia a objetos no seguros para subprocesos en su singleton.

Pero si no lo hace, y usa Spring para inyectar cualquier variable de instancia, entonces sí, son seguros para subprocesos.


En primavera, los frijoles singleton no tendrán ningún estado (sin estado). El alcance del bean Singleton garantiza esa instancia única por BeanFactory. Por lo tanto, en un entorno de subprocesos múltiples no asegurará la instancia única incluso con el alcance de bean de singleton.

Por lo tanto, para solucionar este problema, debemos cambiar el alcance del bean de alcance singleton al de prototipo, ya que es responsabilidad del desarrollador garantizar la seguridad del subproceso.


La primavera no garantiza la seguridad del hilo. Será tu responsabilidad. Spring creará un Singleton, pero si es mutable, puede que no sea seguro para subprocesos. Es responsabilidad del programador cuidar la clase de frijoles de primavera de forma tal que sea seguro para los hilos.


Los frijoles singleton de primavera NO son seguros para la rosca solo porque Spring los crea como instancia. Lo siento.


No. Los dos conceptos ni siquiera están relacionados.

Los singletons son sobre la creación . Este patrón de diseño garantiza que solo se cree una instancia de una clase.

La seguridad del hilo se trata de la ejecución . Para citar Wikipedia :

Un fragmento de código es seguro para subprocesos si solo manipula estructuras de datos compartidas de una manera que garantice la ejecución segura de varios subprocesos al mismo tiempo.

Así que, finalmente, la seguridad de los hilos depende solo del código y del código Y esta es la razón por la que los frijoles de primavera no son seguros para la rosca per se.


Singleton Beans es seguro para subprocesos o no depende de cómo se escribe la clase cuyo ámbito es singleton. Cada subproceso que realiza la llamada tendrá su propia ejecución y no interferirá con la ejecución de otro subproceso, a menos que exista algún código en la clase con ámbito singleton que sea compartido por todos los subprocesos invocados. los valores se modifican, entonces esto puede causar problemas de concurrencia, por lo que es mejor tener esas variables en el nivel del método y no en el nivel de la clase.


Spring solo administra el ciclo de vida de los frijoles singleton y mantiene una sola instancia del objeto. La seguridad del hilo no tiene nada que ver con eso.

si no entonces por que?

Porque el singleton y la seguridad del hilo son dos conceptos diferentes. Usted puede ir para la seguridad del hilo con la palabra clave sincronizada


Tengo una percepción diferente: los frijoles singleton de primavera se crean una sola vez y solo puede haber una instancia disponible en cualquier momento.

Digamos que tiene una variable de instancia que se modifica en un método no sincronizado. En un entorno de subprocesos múltiples, la misma instancia de clase se asignará a todos los subprocesos y 2 subprocesos simultáneos pueden actualizar / cambiar las variables de instancia, lo que puede provocar una situación inesperada. Los frijoles Singleton no proporcionan seguridad de subprocesos y ahora sabe que el uso de variables de instancia puede llevar a resultados inesperados, tiene 2 opciones para resolver lo mismo:

  1. No utilice variables de instancia en un entorno multiproceso. O
  2. Use bloque / palabra clave sincronizada en los métodos donde se modifican las variables de instancia para evitar resultados inesperados.