2010-05-05 6 views

Antwort

13

Nein, ++i sind eigentlich drei Befehle (Last i, erhöht, speichert in i). Es ist definitiv nicht atomar.

+0

Das ist, was ich dachte, über das Speichermodell spricht. Wert lesen, Wert inkrementieren, Wert erhalten. – Finbarr

+2

Und es ist nicht einmal atomar, wenn "i" als "flüchtig" erklärt wird. –

6

Der Betrieb ++ in Java nicht atomar sind, weil sie von drei Operationen

  1. abgelesene Wert gespeichert (atomic)
  2. Fügt man es (atomic)
  3. Wert speichern zusammensetzt (Atom)

So definitiv etwas Schlimmes kann passieren zwischen

im Falle von lang, es ist sogar schwieriger, weil sogar die Leseoperation selbst nicht atomar ist.

fand ich einen schönen Artikel, die

http://www.vogella.de/articles/JavaConcurrency/article.html#memorymodel_atomic