|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Registered User
Iscritto dal: Jul 2007
Messaggi: 915
|
[JAVA] ConcurrentModificationException... non capisco come rimediare!
Allora, ho questo metodo che si occupa di togliere da un ArrayList di Download i download completati o cancellati. Il problema è che mi lancia una ConcurrentModificationException (dove ho messo la freccia) e non capisco perche'! Ogni Download e' un Runnable ed il download avviene quindi in parallelo.
Codice PHP:
edit: ah, l'eccezione salta fuori solo se ci sono almeno due download nell'array list (non importa se completati o meno). Con un solo download il metodo termina correttamente :| edit2: ho provato anche a sincronizzare l'accesso all'arraylist ma niente Ultima modifica di afsdfdlecosdfsfdcco : 19-12-2007 alle 13:46. |
|
|
|
|
|
#2 | |
|
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
Perchè usando l'Iterator in un ciclo while non dovresti mai modificare la List che viene iterata se non tramite l'iterator stesso...
Al massimo puoi rimuovere l'ultimo elemento restituito da iterator.next() tramite iterator.remove() (vedi codice qui sotto, però non so cosa faccia il tuo metodo clearDownload(), oltre a rimuovere un elemento dalla lista) Codice:
if (download.getStatus() == Download.COMPLETE || download.getStatus() == Download.CANCELLED)
{
//clearDownload(downloadList.indexOf(download));
iterator.remove();
}
Quindi credo tu possa fare così: Codice:
if (download.getStatus() == Download.COMPLETE || download.getStatus() == Download.CANCELLED)
{
clearDownload( iterator.remove());
}
L'indice dell'elemento in ogni caso lo puoi ottenere, prima di chiamare iterator.next(), con: Codice:
int nextIndex() -> Returns the index of the element that would be returned by a subsequent call to next. Il problema dell'eccezione lanciata è spiegato qui: Quote:
Ciao Ultima modifica di banryu79 : 19-12-2007 alle 14:04. |
|
|
|
|
|
|
#3 |
|
Registered User
Iscritto dal: Jul 2007
Messaggi: 915
|
|
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
Figurati, è stato un piacere.
Caso vuole che proprio oggi mi son trovato a lavorare con gli Iterator su diversi tipi di Collection e giocoforza ho imparato un po' di cosette su questi simpaticoni. Ciao |
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Inoltre ricordati che ArrayList non è thread safe, l'accesso concorrente va sincronizzato
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 08:44.




















