it-swarm.com.de

Sind Spring Singleton Beans fadensicher?

Ich möchte wissen, ob die Spring-Singleton-Beans fadensicher sind, wenn ja, warum, wenn nicht, warum? 

Da ich Anfängerin im Frühling bin, würde ich mich über Hilfe freuen.

18
Mounica Reddy

Nein. Die beiden Konzepte sind nicht einmal miteinander verbunden.

Bei Singletons geht es um creation. Dieses Entwurfsmuster stellt sicher, dass nur eine Instanz einer Klasse erstellt wird.

Thread-Sicherheit geht es um execution. Zitieren von Wikipedia :

Ein Code ist Thread-sicher, wenn er nur gemeinsam genutzte Datenstrukturen so manipuliert, dass eine sichere Ausführung durch mehrere Threads gleichzeitig gewährleistet ist.

Daher hängt die Thread-Sicherheit schließlich nur vom Code und vom Code ab. Aus diesem Grund sind Spring Beans nicht per se fadensicher.

24
a better oliver

Spring-Singleton-Beans sind NICHT threadsicher, nur weil Spring sie instantiiert. Es tut uns leid.

3
Arthur Dent

Spring verwaltet nur den Lebenszyklus der Singleton-Bean und verwaltet eine einzelne Instanz des Objekts. Fadensicherheit hat nichts damit zu tun. 

wenn nicht dann warum?

Weil Singleton- und Thread-Sicherheit zwei verschiedene Konzepte sind. Sie können mit synchronisierten Schlüsselwörtern zur Thread-Sicherheit gehen

3
M Sach

Ich habe eine andere Wahrnehmung: Spring-Singleton-Beans werden einmal erstellt und es kann zu jedem Zeitpunkt nur eine Instanz verfügbar sein.

Nehmen wir an, Sie haben eine Instanzvariable, die in einer nicht synchronisierten Methode geändert wird. In einer Umgebung mit mehreren Threads wird allen Threads dieselbe Klasseninstanz zugewiesen, und zwei gleichzeitige Threads können die Instanzvariablen aktualisieren/ändern, was zu einer unerwarteten Situation führen kann. Singleton-Beans bieten keine Thread-Sicherheit. Jetzt wissen Sie, dass die Verwendung von Instanzvariablen zu unerwartetem Ergebnis führen kann. Sie haben zwei Optionen, um dasselbe zu lösen: 

  1. Verwenden Sie keine Instanzvariablen in einer Multithread-Umgebung . OR
  2. Verwenden Sie synchronisierte Block-/Schlüsselwörter für Methoden, wo die Instanzvariablen geändert werden, um unerwartete Ergebnisse zu vermeiden.
2
sunil bhardwaj

Feder garantiert keine Gewindesicherheit. Es liegt in Ihrer Verantwortung. Spring erstellt ein Singleton, aber wenn es veränderbar ist, ist es möglicherweise nicht threadsicher. Der Programmierer ist dafür verantwortlich, die Spring Bean-Klasse so zu gestalten, dass sie fadensicher ist.

0
user1865328

Singleton Beans ist threadsicher oder hängt nicht davon ab, wie die Klasse geschrieben wird, deren Gültigkeitsbereich Singleton ist. Jeder aufrufende Thread hat seine eigene Ausführung und greift nicht in die Ausführung eines anderen Threads ein, es sei denn, es gibt Code in der Klasse mit Singletonbereich, der von allen aufrufenden threads.eg gemeinsam genutzt wird, wenn eine Klasse global deklarierte Variablen hat, auf die mit ihrer Methode und zugegriffen wird Wenn die Werte geändert werden, kann dies zu Parallelitätsproblemen führen. Daher ist es besser, diese Variablen auf der Methodenebene und nicht auf der Klassenebene zu haben.

0
Ripudaman Singh

Im Frühjahr haben Singleton-Beans keinen Status (zustandslos). Der Singleton-Bean-Bereich stellt sicher, dass eine einzelne Instanz pro BeanFactory vorhanden ist. In einer Multi-Threading-Umgebung wird die Einzelinstanz also auch mit Singleton-Bean nicht sichergestellt. 

Um dies zu beheben, müssen wir den Bean-Bereich von Singleton Scope in Prototyp Scope ändern, da die Entwickler dafür verantwortlich sind, die Thread-Sicherheit zu gewährleisten. 

0

wenn nicht dann warum?

weil Sie möglicherweise einen Verweis auf nicht threadsichere Objekte in Ihrem Singleton haben. 

Wenn Sie dies nicht tun, und Sie Spring verwenden, um Instanzvariablen zu injizieren, dann sind sie Thread-sicher.

0
NimChimpsky