[Java lista] nagy a csend -> szinkronizalas

Marai Laszlo lists at atleta.hu
2008. Sze. 29., H, 12:11:32 CEST


On Mon, 29 Sep 2008 09:47:09 +0200
Fisha <fisha at freemail.hu> wrote:

  Hali!

> Ha nem lenne nagy a csend nem kérdeznék ilyen butaságokat, de gondoltam
> megtöröm a hallgatást egy kis fecsegéssel :). Szóval, a singletone-os
> thread olvasgatása közben fogalmazódott meg bennem a kérdés: tudtok
> nekem egy olyan életszerű példát mutatni, ahol a synchronized block nem
> a példányra, és nem is az adott osztályra van szinkonizálva, hanem
> valami egész másra? Előre is köszi.

Pl. van egy objektumod (A a; - ez nem az eletszeru resze ;) ) az pedig
hivatkozik tobb masik (mondjuk List<B> bList ) objektumra. Az a objektumot
tobb szalbol is elerik, de a bList tartalma inicializalas utan nem
valtozik. Az a metodusai birizgaljak a B tipusu objektumokat, amik nem
szalbiztosak. Ilyenkor az A metodusok lehetnenek synchronized-ok, de
akkor ha a bList egyik elemen vegzel muveletet, akkor a bList tobbi
elemehez sem fernel hozza, pedig logikailag azzal semmi problema nem
lenne. Ilyenkor szinkronizalhatsz az egyes bList peldanyokra.


Egy pelda, ahol ez nekem elojott -ha jol emlekszem - az egy egyszeru
Bluetooth emulator. Van egy rakas emulalt bluetooth eszkozod (JSR82 API-t
hasznalo osztalyod), es ezek kommunikalnak egymassal. A kommunikacio
szabalyait, hogy mi tortenhet egyszerre, es mi nem (pl. ha valamelyik
eszkoz inquiry-zik, akkor minden mas kommunikacio leall a hatosugaran
belul) azt az emulator osztalyaiban kell implementalni. Ket kulonbozo
piconetben levo eszkoz beszelhet egyszerre, de ket kulon piconetben levo
nem (ott kell a szinkronizacio).

De egy egyszerubb pelda az, ha egy osztalynak van ket kollekcioja, es
vannak metodusaid, amik csak az egyik vagy csak a masik kollekcioval
dolgoznak. Ilyenkor a kollekciora szinkronizalsz (vagy hasznalhaod a
szalbiztos valtozataikat is persze).

  atleta


További információk a(z) Javalist levelezőlistáról