Peter Stibrany wrote:
Ten slajd, ktory ste poslali, podla mna nie je spravny: synchronized
nehovori kedy sa ma co flushovat do hlavnej pamate. Moze sa stat, ze
mate metodu synchronized, ale nic sa neflushne, jednoducho preto, ze
jvm zisti, ze objekt na ktorom synchronizujete, je viditelny iba z
jedneho threadu. Dosledkom je, ze tento kod "synchronized (new
Object());" neurobi vobec nic, ziadny flush. Ako sa uvadza v prednaske
z JavaOne 2006 (
http://developers.sun.com/learning/javaoneonline/2006/coreplatform/TS-1630.html),
pohlad na synchronized ako na 'flushovanie', je mylny.
Podle toho co se pise v /Java Language Specification 3rd Edtion -
/http://java.sun.com/docs/books/jls/third_edition/html/memory.html
To souhlasi.
Happens before order se tranzitivne prenasi pres spolecny zamek a
volatile promene (to plati od Javy 1.5, do te doby to platilo jen pro
jednu konkretni promenou).
Dale happens before plati pro vsechny objekty dosazitelne z final filedu
(pokud na ne pristupujete pres tyto fieldy a ne oklikou).
Lukas
______________________________________________________________________
This email has been scanned by the MessageLabs Email Security System.
For more information please visit http://www.messagelabs.com/email
______________________________________________________________________