Builder.cz - Informacni server o programovani

Odběr fotomagazínu

Fotografický magazín "iZIN IDIF" každý týden ve Vašem e-mailu.
Co nového ve světě fotografie!

 

Zadejte Vaši e-mailovou adresu:

Kamarád fotí rád?

Přihlas ho k odběru fotomagazínu!

 

Zadejte e-mailovou adresu kamaráda:



ConcurrentModificationException v jednom vlákně

Seznam témat     Nová odpověď

Přihlásit se     Registrace     Zapomenuté heslo

Re: ConcurrentModificationException v jednom vlákně

Autor: Mirek164 ♂

9:25:53 26.09.2012

Bylo to tak. V dusledku nejakych inkonzistenci byly obe kolekce stejne. Diky

Citovat příspěvek

 

Re: ConcurrentModificationException v jednom vlákně

Autor: Mirek164 ♂

9:08:38 24.09.2012

To prave neni, territoryIndices je jina kolekce nez loser.getTerritoryIndices().
Zapomnel jsem napsat, ze to pada na tom remove.

Citovat příspěvek

 

Re: ConcurrentModificationException v jednom vlákně

Autor: Natix ♂

13:01:48 21.09.2012

Z JavaDocu LinkedListu:

[i]
The iterators returned by this class's iterator and listIterator methods are fail-fast: if the list is structurally modified at any time after the iterator is created, in any way except through the Iterator's own remove or add methods, the iterator will throw a ConcurrentModificationException. Thus, in the face of concurrent modification, the iterator fails quickly and cleanly, rather than risking arbitrary, non-deterministic behavior at an undetermined time in the future.
[/i]

Takže problém je v tom, že uvnitř for cyklu upravuješ obsah listu:
territoryIndices.add(terriID);

Citovat příspěvek

 

ConcurrentModificationException v jednom vlákně

Autor: Mirek164 ♂

9:01:58 21.09.2012

Zdravím,

následující kód mi vyhazuje výjimku, ač běží v jednom vlákně. Procházel jsem různá fóra a tam doporučovali procházení kolekce přes iterátor, což jsem udělal, ale problém úplně nezmizel. Tady je kód:

[code]
Integer capitalContID = territories.get(loser.getCapital()).getContinentID();

for (Iterator it = loser.getTerritoryIndices().iterator(); it.hasNext();)
{
Integer terriID = (Integer) it.next();
Territory t = territories.get(terriID);
if (t.getContinentID() == capitalContID /*&& !t.isCapital()*/)
{
t.setOwner(this);
territoryIndices.add(terriID);
t.setArmy(1);
it.remove();
}
}
[/code]

kolekce je typu LinkedList. Problém nastává při mazání. Mohl by mi někdo poradit? Díky

Citovat příspěvek

 

 

 

Přihlášení k mému účtu

Uživatelské jméno:

Heslo: