|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Member
Iscritto dal: Jul 2005
Messaggi: 291
|
[JAVA]problema concorrenza (inesistente) su HashSet
Chi mi risolve (e possibilmente spiega) questo problema ha una pizza pagata (in caso di spiegazione offro pure birra)!!!!!
Scherzi a parte ho un HashSet che scandisco regolarmente con un foreach Codice:
Set<Corso> corsiDisponibili=ipcuc.visualizzaCorsiSeguiti(studente); for (Corso corso:corsiDisponibili){ //BLHA } Attendo lumi!!! |
![]() |
![]() |
![]() |
#2 |
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
il problema è che gli iterators usano un meccanismo di "fail fast", come lo chiamano alla Sun, cioè un meccanismo estremamente approssimativo
![]() vale a dire che la sedicente ConcurrentModificationException in realtà in buona parte dei casi concurrent non è. il meccanismo funziona nella seguente maniera: quando iteri tramite un iterator l'unica modifica che puoi fare ad una Collection è la rimozione dell'elemento su cui stai attualmente iterando, e lo devi fare necessariamente tramite il metodo remove dell'iterator. se all'iterazione successiva l'iterator si accorge che la Collection è stata modificata, e non per mano sua, da' per scontato che la modifica sia "concorrente", ovvero che l'abbia fatto un altro thread mal sincronizzato, e lancia l'eccezione. vedo che il tuo codice utilizza un enhanced for: per modificare la Collection su cui iteri tramite iterator devi avere l'istanza dell'iterator, quindi non puoi iterare con l'enhanced for. |
![]() |
![]() |
![]() |
#3 |
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
|
![]() |
![]() |
![]() |
#4 | |
Member
Iscritto dal: Jul 2005
Messaggi: 291
|
Quote:
PS: son di origini napoletane, perchè? Ultima modifica di morskott : 03-11-2007 alle 19:05. |
|
![]() |
![]() |
![]() |
#5 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
|
![]() |
![]() |
![]() |
#6 |
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
|
![]() |
![]() |
![]() |
#7 |
Member
Iscritto dal: Jul 2005
Messaggi: 291
|
Certo pure stupidini quelli della sun, perchè implemntare il foreach solo per Collections immutabili...
|
![]() |
![]() |
![]() |
#8 |
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
non sono immutabili, le puoi modificare solo che le modifiche che puoi fare sono limitate alla sola rimozione dell'elemento su cui stai iterando, cosa che va fatta tramite il metodo remove dell'iterator.
|
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 18:47.