|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Junior Member
Iscritto dal: Dec 2008
Messaggi: 9
|
[java] lanciare ConcurrentModificationException
Salve a tutti,
sto realizzando una struttura dati che devve essere possibile iterare. Il problema sta appunto nella realizzazione dell'iteratore, in quanto dovrebbe lanciare ConcurrentModificationException se la struttura dati viene modificata da un'altro thread mentre si sta iterando la struttura. grazie e spero di essere stato chiaro |
|
|
|
|
|
#2 | |
|
Senior Member
Iscritto dal: Oct 2006
Città: Roma
Messaggi: 1383
|
Quote:
l'implementazione é molto semplice: tutti i metodi che in qualche modo modificano la collection devono come prima cosa controllare se c'é un'iterazione in corso (usa un flag, quello che ti pare) ed in tal caso lanciare l'eccezione. spero di ricordarmi correttamente i dettagli del contratto. |
|
|
|
|
|
|
#3 | |
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
E come hai detto tu, cioè ogni operazione di modifica va a controllare se c'è una iterazione in corso, non è praticabile/utile. Le collezioni standard di Java SE usano una tecnica molto semplice: ogni collezione ha un campo interno modCount (int) e ogni operazione di modifica diretta sulla collezione lo incrementa. Quando un iteratore viene istanziato, l'iteratore si copia il valore di modCount in un suo campo interno. Quando un next/remove viene invocato sull'iteratore, vengono confrontati i due modCount collezione vs iteratore. Se uguali ok, se diversi la collezione è stata modificata, quindi ConcurrentModificationException.
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 23:56.




















