2016-06-16 9 views
-3

Ich verstehe volatile sollte in einem Klassenfeld verwendet werden, um zu verhindern, dass die JVM den Wert zwischenspeichert, so dass es immer der neueste Wert sein wird, wenn es gelesen wird.Wann sollten wir Felder als "flüchtig" definieren? Wann ist es unnötig?

Wenn mein Verständnis richtig ist, bedeutet das nicht, dass wir alle Felder mit volatile definieren sollten, wenn wir in einer Thread-sicheren Multi-Thread-Umgebung arbeiten? Wann ist es nicht notwendig, ein Feld als volatile zu definieren?

+0

* Wir sollten alle Felder mit flüchtigen definieren * Jedes Feld jedes Objekts? Nein. Nur Felder, auf die mehrere gleichzeitige Threads zugreifen können. – shmosel

+0

volatile verhindert, dass die JVM den Code für Ihre Variable optimiert. Wenn Sie alle Felder als flüchtig definieren, verlieren Sie eine Menge Leistung. –

Antwort

0

Es ist nicht notwendig, ein Feld volatile zu definieren, wenn auf dieses Feld nicht von mehreren Threads zugegriffen wird, ohne dass ein anderer Mechanismus für die Synchronisierung zur Verfügung steht (z. B. lock s).

Wenn auf jedes Mitglied einer Klasse zugegriffen werden kann, sollte jedes Feld so markiert werden.

+0

@meriton Guter Punkt! Behebt meine Bearbeitung das Problem? –

Verwandte Themen