Dobrý den,

1) Kontrakt bude zřejmě podobný jako u 
http://java.sun.com/javase/6/docs/api/java/util/concurrent/ConcurrentHashMap.html,
 prostě iterovat by mělo jen jedno vlákno.
2) A k tomu zamykání: v té ukázce se snaží hlavně říct, že nemáte 
synchronizovat přes proměnnou s - zřejmě se při každém volání keySet() vrací 
nový objekt a ten zámek by nefungoval.

L.
________________________________________
From: [EMAIL PROTECTED] [EMAIL PROTECTED] On Behalf Of Lukáš Zapletal [EMAIL 
PROTECTED]
Sent: Thursday, April 03, 2008 10:01 AM
To: Java
Subject: Collections.synchronizedMap a jeho mutex

Dobry den,

mam dotaz ohledne Collections.synchronizedMap. Tato metoda obali mapu
(nebo resp. jina metoda jinou kolekci) implementaci, ktera
synchronizuje vsechny metody oproti clenske promenne "mutex". Toto je
implementace Sunu ve verzich 5 a 6.

V dokumentaci se ale doporucuje pri iterovani pouzit synchronized
blok, aby nedochazelo ke "concurrent exceptions". Co me udivuje je
vsak to, ze pro synchronized blok ma byt pouzit jako mutex primo
instance kolekce (v prikladu je to "m"). Tohle by preci nemelo
fungovat, kdyz se kolekce interne synchronizuje oproti prvku
"m.mutex", ne?

 Map m = Collections.synchronizedMap(new HashMap());
      ...
  Set s = m.keySet();  // Needn't be in synchronized block
      ...
  synchronized(m) {  // Synchronizing on m, not s!
      Iterator i = s.iterator(); // Must be in synchronized block
      while (i.hasNext())
          foo(i.next());
  }

Mozna potrebuju postouchnout, neco mi zrejme unika. Diky

--
Lukas Zapletal
http://lukas.zapletalovi.com

Odpovedet emailem