Verständnis passiert-vor und Synchronisation [duplizieren]
Diese Frage hat hier bereits eine Antwort:
Wie zu verstehen passiert, bevor konsequent 4 AntwortenIch versuche Java zu verstehen passiert-vor der Bestellung concept und es gibt ein paar Dinge, die sehr verwirrend wirken. Soweit ich das beurteilen kann, handelt es sich bei "happen before" nur um eine Reihenfolge der Aktionen, und es werden keine Garantien für die Ausführungsreihenfolge in Echtzeit gegeben. Eigentlich (betone meins):
Es sollte beachtet werden, dass das Vorhandensein einer Beziehung zwischen zwei Aktionen vor dem Auftreten nicht unbedingt impliziert, dass sie in dieser Reihenfolge in einer Implementierung stattfinden müssen.Wenn die Nachbestellung @ ergi Ergebnisse im Einklang mit einer legalen Hinrichtung, es ist nicht illegal.
Also, alles was es sagt ist, dass wenn es zwei Aktionen gibtw
(schreibe undr
(lesen) so dasshb (w, r), alsr
könnt tatsächlich passiert vorw
in einer Ausführung, aber es gibt keine Garantie dafür. Auch das Writew
wird vom read @ beobachtr
.
Wie kann ich feststellen, dass zwei Aktionen zur Laufzeit nacheinander ausgeführt werden? Zum Beispiel
public volatile int v;
public int c;
Aktionen
Thread A
v = 3; //w
Thread B
c = v; //r
Hier haben wirhb(w, r)
aber das heißt nicht, dassc
enthält den Wert3
nach Zuordnung. Wie erzwinge ich dasc
ist mit 3 belegt? Hatsynchronization order solche Garantien geben?