Heim  >  Artikel  >  Java  >  Was Sie bei der Verwendung des Schlüsselworts volatile in Java beachten sollten

Was Sie bei der Verwendung des Schlüsselworts volatile in Java beachten sollten

高洛峰
高洛峰Original
2017-02-27 15:20:171740Durchsuche

Flüchtige Variablen haben synchronisierte Sichtbarkeitseigenschaften, aber keine atomaren Eigenschaften. Dies bedeutet, dass Threads automatisch den neuesten Wert flüchtiger Variablen ermitteln können. Flüchtige Variablen können zur Bereitstellung von Thread-Sicherheit verwendet werden, jedoch nur für eine sehr begrenzte Anzahl von Anwendungsfällen: Es gibt keine Einschränkungen zwischen mehreren Variablen oder zwischen dem aktuellen Wert und dem geänderten Wert einer Variablen. Daher reicht volatile allein nicht aus, um Zähler, Mutexe oder irgendetwas mit Invarianten zu implementieren, die sich auf mehrere Variablen beziehen.

Das Schlüsselwort volatile ist ein etwas schwächerer Synchronisationsmechanismus in Java. Warum wird es als schwacher Mechanismus bezeichnet?

Bevor wir dies verstehen, werfen wir zunächst einen Blick auf die beiden Mechanismen, die Java bei der Synchronisierung einhalten muss:

1. Sichtbarkeit: Wenn ein Thread eine gemeinsam genutzte Variable ändert, kann ein anderer Thread lesen dieser geänderte Wert.

2. Atomarität: bezieht sich auf Unteilbarkeit. Hier bedeutet es, dass es sich bei der Ausführung des Programms um eine atomare Operation handelt, wenn sie nicht unterbrochen werden kann.

Das Schlüsselwort volatile kann keine Atomizität, sondern nur Sichtbarkeit garantieren. Daher kann dieses Schlüsselwort unter normalen Umständen nicht für Synchronisierungsvorgänge verwendet werden. Es kann jedoch zur Synchronisierung verwendet werden, wenn die folgenden zwei spezifischen Bedingungen erfüllt sind:

1. Das Operationsergebnis hängt nicht vom aktuellen Wert der Variablen ab, oder es kann garantiert werden, dass nur ein einzelner Thread Änderungen vornimmt der Wert der Variablen.

2. Variablen müssen nicht an invarianten Einschränkungen mit anderen Zustandsvariablen teilnehmen

Beispiel:

volatile boolrean flag;
public void close(){
    flag = true;
}
public void open(){
   while(!flag){
    ...
   }
}

Zu diesem Zeitpunkt hängt die Ausführung der open()-Methode vom Wert des Flags ab, und es ist umständlich, das synchronisierte Schlüsselwort oder andere Methoden zum Synchronisieren zu verwenden oben zwei Bedingungen, sodass das Schlüsselwort volatile für die Synchronisierung verwendet werden kann.

Prinzip des Schlüsselworts volatile:

Variablen, die durch volatile geändert werden, werden nicht in Registern oder anderen Orten zwischengespeichert. Jeder Schreibvorgang wird direkt in den Hauptspeicher geschrieben Gleiches gilt für Lesevorgänge aus dem Hauptspeicher. So ist die Sichtbarkeit gewährleistet.

Die oben genannten Vorsichtsmaßnahmen für die Verwendung des flüchtigen Schlüsselworts in Java werden Ihnen hoffentlich weiterhelfen. Wenn Sie Fragen haben, hinterlassen Sie mir bitte eine Nachricht rechtzeitig. Ich möchte mich auch bei Ihnen allen für Ihre Unterstützung der chinesischen PHP-Website bedanken!


Weitere verwandte Artikel zu Vorsichtsmaßnahmen bei der Verwendung des Schlüsselworts volatile in Java finden Sie auf der chinesischen PHP-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