[Javalist] új Java blog
István Székely
istvan.szekely at i-logic.hu
2012. Júl. 9., H, 14:08:26 CEST
Sziasztok!
Itt van egy nagyon jó kis leírás a DCL problémáiról és a megoldásokról.
http://www.javamex.com/tutorials/double_checked_locking.shtml
http://www.javamex.com/tutorials/double_checked_locking_fixing.shtml
"Note that this is OK as of Java 5 /because/ the definition of volatile
was specifically changed to make it OK. Accessing a volatile variable
has the semantics of synchronization as of Java 5. In other words Java 5
ensures that the unsycnrhonized volatile read /must/ happen after the
write has taken place, and the reading thread will see the correct
values of all fields on MyFactory."
Emberünk azt is leírja, hogy a volatile és a final (!) kulcsszavak
szemantikája megváltozott Java 5-ben. Ettől a verziótól kezdve a final
változó is elegendő, mert mindkét kulcsszó memory barrier-t is jelent,
ami többek között azt is eredményezi, hogy:
- a regiszterváltózók szinkronizálásra kerülnek
- a referencia beállítása csak akkor történik meg, amikor az objektum
már teljesen inicializált állapotban van.
Tehát Java 5-től kezdve a Péter által a cikkben taglalt sorrendi
probléma már nem jelentkezhet (az újabb JLS megköveteli a sorrendiséget).
Üdv,
Stivi
On 2012-07-09 13:27, Laszlo Hornyak wrote:
> 2012/7/9 Gábor Garami <gabor.garami at hron.me>:
>> Egykenel nem lenne megoldas az early check + synchronized?
>>
>> public static Singleton getInstance() {
>> if(instance != null) return instance;
>> synchronized(instance) { /* foo */ ; return instance; }
>> }
> Hali!
>
> Asszem ez csak akkor mukodne teljesen megbizhatoan, ha az instance-t
> volatile-nek jelolod. Kulonben amikor aszondod hogy "if(instance !=
> null) return instance;" ezen a ponton ha mar valaki adott neki
> erteket, de a te szaladban be van cacehlve egy null ertek, akkor
> letrehozol egy uj peldanyt es azzal helyettesited be, mikozben egy
> masik szal meg a regi erteket hasznalja. Szoval nem egeszen
> bolondbiztos.
>
> Egyszeru esetekben, amikor csak nem akarsz temp objektumokat
> letrehozni es totalisan mentes az osztalyod minden konfiguraciotol, en
> leginkab csak csinalni szoktam egy ilyet. (pl spring rowmapperek)
>
> public final static KakukkRowMapper instance = new KakukkRowMapper();
> //single instance
> private KakukkRowMapper() {} //no nyuka-piszka!
>
>
>> A ket return persze csunya.
>>
>> Garami Gábor
>> E-mail: gabor.garami at hron.me
>> Tel: +36 20 235 9621
>> MSN: hrgy at vipmail.hu
>> Skype: hron84
>>
>>
>>
>> 2012/7/9 <istvan.ketler at lhsystems.com>
>>> Szia,
>>>
>>>
>>>
>>> Egyszerű öröklődés: már a legelején a jó B konstruktor van, benne van a
>>> super(n). Ezt gondolom nem így akartad.
>>>
>>>
>>>
>>> Optimalizálás: nem gondolkodtam a miérteken, de a számok azt mutatják,
>>> hogy a programozó által "optimálisnak" gondolt megoldás sokszor nem jobb,
>>> sőt akár rosszabb is lehet, mint a "lassúnak" vélt megoldás. Ez az igazság
>>> azt hiszem ismét beigazolódott.
>>>
>>>
>>>
>>> Jó kis posztok, bár az egyke esetén is hasznos lett volna leírni a
>>> gondolkodni lusták számára, hogy miért az a megoldás, ami...
>>>
>>>
>>>
>>> Üdvözlettel,
>>>
>>>
>>>
>>> Iván
>>>
>>> István Ketler
>>> Senior Consultant
>>>
>>> Lufthansa Systems Hungaria Kft.
>>> Development Center Pest
>>> Neumann János u. 1/e
>>> 1117 Budapest
>>> Hungary
>>>
>>> Tel: +36 1 887-2815
>>> Fax: +36 1 887-2977
>>> Mobile: +36 30 600-4936
>>>
>>> Room: Infopark E, Room LH2-24
>>>
>>> e-mail: istvan.ketler at lhsystems.com
>>> Internet: www.LHsystems.hu
>>>
>>>
>>>
>>>
>>>
>>> Sitz der Gesellschaft / Corporate Headquarters: Lufthansa Systems Hungaria
>>> Kft, Budapest, Fövarosi Birosag 01-09-463417
>>> Geschaeftsfuehrung / Management Board: Monika Houck
>>>
>>>
>>> From: javalist-bounces at lists.javaforum.hu
>>> [mailto:javalist-bounces at lists.javaforum.hu] On Behalf Of Peter Verhas
>>> Sent: Monday, July 09, 2012 10:35 AM
>>> To: Java lista
>>> Subject: [Javalist] új Java blog
>>>
>>>
>>>
>>> Új java blog magyarul
>>>
>>>
>>>
>>> http://tifyty.wordpress.com/
>>>
>>>
>>>
>>>
>>>
>>> Írok benne mindenféle hülyeséget, aztán majd jól megköpköditek.
>>>
>>>
>>>
>>> --
>>> Verhás Péter
>>> peter at verhas.com
>>> +36(30)9306805
>>> skype: verhas
>>>
--------- következő rész ---------
Egy csatolt HTML állomány át lett konvertálva...
URL: <http://lists.javaforum.hu/pipermail/javalist/attachments/20120709/6e88687e/attachment.html>
További információk a(z) Javalist levelezőlistáról