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