Heim  >  Artikel  >  Java  >  Lösungen für Thread-Sicherheitsprobleme im Singleton-Modus in Java

Lösungen für Thread-Sicherheitsprobleme im Singleton-Modus in Java

黄舟
黄舟Original
2017-09-15 10:36:301617Durchsuche

In diesem Artikel werden hauptsächlich relevante Informationen zu Thread-Sicherheitsproblemen im Java-Singleton-Modus vorgestellt. Ich hoffe, dass jeder in diesem Artikel die Verwendung der Thread-Sicherheit im Singleton-Modus verstehen und beherrschen kann >

Thread-Sicherheitsprobleme im Java-Singleton-Modus

Der Standardzugriffsbereich der vom Spring IOC-Container bereitgestellten Bean ist der Singleton-Modus. Das heißt, es gibt im gesamten Anwendungslebenszyklus nur eine Instanz. Daher besteht bei Multithread-Parallelität ein Risiko für die Thread-Sicherheit. Unsere Servlets unter dem MVC-Framework sind Thread-sicher. Da sich das Servlet auf der Client-Seite befindet, gibt es relativ wenig Parallelität, aber für die Web-Service-Seite muss dies berücksichtigt werden.

ThreadLocal-Klasse: Stellt eine unabhängige Kopie der Variablen (Instanz) für jeden Thread bereit und greift auf die Isolation von jeder anderen Instanz zu.

Im Synchronisationssperrmechanismus wartet der Nachzügler-Thread auf den Abschluss des vorherigen Threads, bevor er auf die Mitgliedsvariable zugreifen kann. ThreadLocal implementiert die Instanzreplikation und isoliert Objektzugriffsdatenkonflikte. Gleichzeitig kann es auch einen kleinen Teil des Verbrauchs und der Belastung durch das Lebenszyklusmanagement einer großen Anzahl von Instanzen im Prototyp-Zugriffsmodus lösen. Es handelt sich um zwei Erkenntnisse von „Zeit gegen Raum tauschen“ und „Raum gegen Zeit tauschen“. Ersteres stellt nur eine eindeutige Variable für den Zugriff verschiedener Threads bereit, während letzteres eine Kopie für jeden Thread bereitstellt, sodass gleichzeitig darauf zugegriffen werden kann, ohne sich gegenseitig zu beeinflussen. Gleichzeitig wird die Kopie im gespeichert Speicher und es wird beim nächsten Mal nicht erneut darauf zugegriffen. Generieren Sie die Instanz neu, um den Ressourcenverbrauch des Servers zu reduzieren.



Wir wissen, dass in einer Multithread-Umgebung im Allgemeinen nur zustandslose Beans gemeinsam genutzt werden können. Im Frühjahr können die meisten Beans als Singleton-Bereich deklariert werden. Dies liegt daran, dass Spring ThreadLocal verwendet, um nicht threadsichere Zustände in einigen Beans (z. B. RequestContextHolder, TransactionSynchronizationManager, LocaleContextHolder usw.) zu verarbeiten, wodurch sie threadsicher werden, da zustandsbehaftete Beans von mehreren Threads gemeinsam genutzt werden können.

Thread-Sicherheitsprobleme: Verursacht durch globale Variablen und statische Variablen. Wenn jeder Thread nur Lesevorgänge für globale Variablen und statische Variablen hat, ist diese globale Variable im Allgemeinen threadsicher Threads führen gleichzeitig Schreibvorgänge aus. Im Allgemeinen muss die Thread-Synchronisierung berücksichtigt werden, da sonst die Thread-Sicherheit beeinträchtigt werden kann.


1) Konstanten sind immer Thread-sicher (Konstantwert)

2) Das Erstellen einer neuen Instanz vor jedem Methodenaufruf ist Thread-sicher. (Verschiedene Instanzen sind voneinander isoliert)

3) Lokale Variablen sind threadsicher (isoliert)


Da jedes Mal, wenn eine Methode ausgeführt wird, lokale Variablen in einem unabhängigen Raum erstellt werden, und es handelt sich nicht um eine gemeinsam genutzte Ressource. Lokale Variablen umfassen Methodenparametervariablen und methodeninterne Variablen.

Status:

Verfügt über Funktionen zur Datenspeicherung und -änderung. Stateful Bean, ein Objekt mit Instanzvariablen, kann Daten speichern und ist nicht threadsicher.

Zustandslos:

Es ist ein einmaliger Vorgang und die Daten können nicht geändert werden. Zustandsloses Objekt (Stateless Bean), ein Objekt ohne Instanzvariablen, kann keine Daten speichern, ist eine unveränderliche Klasse und threadsicher. Im Frühjahr ist der Singleton-Modus eine gemeinsam genutzte Instanz zur Verbesserung der Leistung. Stateful Beans sind in einer Multithread-Umgebung nicht sicher, daher ist der Prototype-Prototypmodus geeignet. Prototyp: Jede Anfrage für eine Bean erstellt eine neue Bean-Instanz.

Das obige ist der detaillierte Inhalt vonLösungen für Thread-Sicherheitsprobleme im Singleton-Modus in Java. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn