Was ist der flüchtige Modifikator für Java-Variablen?
Übersicht über flüchtige Modifikatoren
- Es ist ein Modifikator für Variablen. In einigen Fällen kann es anstelle von synchronisiert verwendet werden.
- Das Folgende ist ein Anwendungsbeispiel.
private static volatile int count = 0;
Rolle 1: Verbieten Sie das Lesen aus dem Cache-Wert
- Wenn Multithreading verwendet wird, kann jeder Thread den Wert des Felds zwischenspeichern. Aus diesem Cache auszuschließende Rolle (Da jeder Thread eine Kopie der Variablen zur Leistungsverbesserung vorbereitet, kann sie vom Wert im Thread abweichen, wenn sich der Wert des Hauptspeichers ändert.)
- Wenn Sie flüchtig hinzufügen, können Sie ** diese Variable aus dem Hauptspeicher lesen ** anfordern.
Rolle 2: Von der Optimierung zur Kompilierungszeit ausschließen
- Die Optimierung erfolgt beim Kompilieren von Java, um unnötige Auswertungen zu vermeiden.
#Code wie unten...
boolean flg = true;
while(flg){
System.out.println("hello!");
}
#Wie folgt optimiert...→ Die Schleife endet nicht unter der Annahme, dass flg in einem anderen Thread in false geändert wird!
if(flg){
while(true){
System.out.println("hello!");
}
}
- Durch Hinzufügen von volatile können Sie verlangen, dass Sie die oben genannte ** Optimierung ** nicht durchführen.
Wie unterscheidet es sich von synchronisiert?
- Synchronisiert ist ausgefeilter (flüchtig ist eine vereinfachte Version von synchronisiert)
--volatile hat die oben genannte Rolle, ist jedoch nicht threadsicher.
--volatile hat die Aufgabe, Variablen zwischen dem Thread und dem Hauptspeicher zu synchronisieren (= Lesen des Werts aus dem Hauptspeicher ohne Caching), aber synchronized hat auch die Aufgabe, eine exklusive Steuerung durchzuführen.
-Es ist ein Fehler zu sagen, dass ** flüchtig ** für die ausschließliche Kontrolle verwendet werden kann.
Verweise
[Difference Between Volatile and Synchronized Keywords in Java]
https://dzone.com/articles/difference-between-volatile-and-synchronized-keywo