Ich möchte eine Variable zwischen mehreren Threads wie folgt teilen:
%Vor% Ich möchte flag
zwischen main und help thread freigeben, wo es sich um zwei verschiedene Java-Klassen handelt, die ich erstellt habe. Gibt es einen Weg, dies zu tun? Vielen Dank!
Sowohl T1
als auch T2
können auf eine Klasse verweisen, die diese Variable enthält. Sie können dann diese Variable flüchtig machen, und das bedeutet, dass Änderungen an dieser Variablen sofort in beiden Threads sichtbar sind.
Weitere Informationen finden Sie in diesem Artikel .
Volatile Variablen teilen die Sichtbarkeitsfunktionen von synchronized, aber keine der Atomizitätsmerkmale. Dies bedeutet, dass Threads werden automatisch den aktuellsten Wert für flüchtige Variablen sehen. Sie können verwendet werden, um die Fadensicherheit zu gewährleisten, aber nur in einem sehr begrenzte Anzahl von Fällen: solche, die keine Zwänge zw mehrere Variablen oder zwischen dem aktuellen Wert einer Variablen und ihrer zukünftige Werte.
und notieren Sie die Vor- / Nachteile der Verwendung von volatilen vs komplexeren Möglichkeiten der Freigabe von Staat.
Zusätzlich zu den anderen Vorschlägen können Sie das Flag auch in eine Steuerelementklasse einfügen und eine letzte Instanz in der übergeordneten Klasse erstellen:
%Vor% Um es zwischen den Instanzen von T1
und T2
sichtbar zu machen, könnten Sie die beiden Klassen veranlassen, einen Verweis auf ein Objekt zu enthalten, das die Variable enthält.
Wenn die Variable geändert werden soll, wenn die Threads ausgeführt werden, müssen Sie die Synchronisierung in Betracht ziehen. Der beste Ansatz hängt von Ihren genauen Anforderungen ab, aber die wichtigsten Optionen sind wie folgt:
volatile
; AtomicBoolean
; Sie können die Sperrvariablen "a" und "b" verwenden und sie synchronisieren, um den "kritischen Abschnitt" in umgekehrter Reihenfolge zu sperren. Z.B. Benachrichtige "a", dann "b", "DRUCKEN", Benachrichtige "b" und dann "a".
Bitte beachten Sie den folgenden Code: -
%Vor%}
AUSGABE: - 1 A 2 B 3 A 4 B 5 A 6 B 7 A 8 B 9 A 10 B
Tags und Links java multithreading synchronization shared