Auswirkungen mehrerer Schreibvorgänge auf eine flüchtige Variable in JavaJava

Java-Forum
Guest
 Auswirkungen mehrerer Schreibvorgänge auf eine flüchtige Variable in Java

Post by Guest »

Ich habe auf dieser Website einige interessante Fragen (z. B. diese) zu den Sichtbarkeitseffekten von flüchtigen Variablen in Java gefunden, die aus diesem Absatz aus dem Buch „Java Concurrency in Practice“ stammen:

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?
Mit anderen Worten: A0 schreibt die flüchtige Variable, diesen Wert wird später von A überschrieben (der die Variable nicht liest) und anschließend von B gelesen, sodass wir zwei Schreibvorgänge von verschiedenen Threads haben (

Code: Select all

A0
und A) und eine Leseoperation von einem dritten Thread (

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).

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post
  • Sollte Interlocked.comParenexChange auch eine flüchtige Variable?
    by Anonymous » » in C#
    0 Replies
    10 Views
    Last post by Anonymous
  • Sind alle C#-Schreibvorgänge „flüchtig“?
    by Guest » » in C#
    0 Replies
    11 Views
    Last post by Guest
  • Flüchtige Variablen und andere Variablen
    by Guest » » in Java
    0 Replies
    21 Views
    Last post by Guest
  • Welche Auswirkungen hat die Unterdrückung von PendingModelChangesWarning von EF Core?
    by Guest » » in C#
    0 Replies
    15 Views
    Last post by Guest
  • Solrj -Schreibvorgänge fehlschlagen
    by Anonymous » » in Java
    0 Replies
    7 Views
    Last post by Anonymous