DD,
často při čtení kódu (ale i učebnicích) narážím na něco jako toto:
class A {
private int f;
public synchronized int getF() { return f };
public synchronized void setF(int f) { this.f = f };
}
Podle JLS je atomické jednoduché čtení/zápis referečnní proměnné a
primitives krom long a double (pokud nejsou volatile). Nehrozí tedy u nich
žádné interleaving (přerušení v půlce).
To, myslím, beze zbytku platí pro setF(), kdy se jedná o jednoduché
nastavení, a tedy nemusí být synchronized.
U getF() jsou to možná dvě operace (instrukce) pro JVM (přečíst a vrátit),
ale nejsem si jistý, a proto v tomto případě taky raději synchonizuju...
Chci se tedy zeptat, jestli je tedy u setF() synchronizace opravdu
zbytečná. A jak je to s getF(), zda je to atomická operace a také není
nutné synchronizovat.
Díky
Libor