Dobry den,  

problem nie je s atomicitou operacie, ale s tym, aby tato zmena (zapis do 
premennej) bola viditelna v inych threadoch. Ak takuto viditelnost potrebujete, 
tak potrebujete nejaku formu synchronizacie. Ak tam ziadnu synchronizaciu mat 
nebudete, tak sa moze stat ze ine thready uvidia staru hodnotu.

-Peter  


On Wednesday, 13. June 2012 at 10:34, Libor Jelinek wrote:

> 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



Odpovedet emailem