Die Sichtbarkeitseffekte flüchtiger Variablen gehen über den Wert der flüchtigen Variablen selbst hinaus. Wenn Thread A in eine flüchtige Variable schreibt und Thread B anschließend dieselbe Variable liest, werden die Werte aller Variablen, die für A vor dem Schreiben in die flüchtige Variable sichtbar waren, nach dem Lesen der flüchtigen Variablen für B sichtbar. Aus Sicht der Speichersichtbarkeit ist das Schreiben einer flüchtigen Variablen also wie das Verlassen eines synchronisierten Blocks und das Lesen einer flüchtigen Variablen wie das Betreten eines synchronisierten Blocks.
Das gibt es , jedoch ein Szenario, das mir selbst nach dem Lesen der Antworten auf verwandte Fragen auf dieser Website nicht ganz klar ist, konkret:
- Was wären die Auswirkungen? ein Thread A0, der zuvor in dieselbe flüchtige Variable schreibt der Thread A?
Code: Select all
A0
Code: Select all
B
Kann ich mit Sicherheit davon ausgehen, dass sowohl A als auch B garantiert alles sehen, was sichtbar war? A0 bevor A0 in die flüchtige Variable geschrieben hat?
UPDATE
Das ist eine konzeptionelle Frage zum Java-Speichermodell.
Ich weiß, dass ich das nicht kann Sagen Sie die Reihenfolge voraus, in der Schreibvorgänge in die flüchtige Variable in den Threads A0 und A und die Lesevorgänge in Thread B erfolgen.
Allerdings nur für Um die Diskussion zu erleichtern, nehmen wir an, dass A0 lange vor A startet und nach einer weiteren beträchtlichen Zeitspanne B startet, und gehen wir vereinfachend davon aus, dass dies der Fall ist reicht aus, um sicherzustellen, dass die Schreib- und Lesevorgänge im erfolgen beschriebene Reihenfolge (ich weiß, dass die Reihenfolge nicht nur durch den Zeitpunkt garantiert werden kann, dies ist nur eine Vereinfachung, um eine Abweichung von der ursprünglichen Frage zu vermeiden).