View Full Version : [Java] sincronizzazione durante iterazione
in un oggetto Vector le operazioni di aggiunta e rimozione di elementi sono atomiche; lo è anche una intera iterazione su tutti gli elementi fatta tramite un iterator? per esempio questa:
Vector<Integer> asd = ...;
for (Integer lol : asd) {
// ...
}
se durante il for un altro thread chiama per esempio la add che fa, aspetta o incasina tutto?
grazie
^TiGeRShArK^
19-12-2006, 20:04
in un oggetto Vector le operazioni di aggiunta e rimozione di elementi sono atomiche; lo è anche una intera iterazione su tutti gli elementi fatta tramite un iterator? per esempio questa:
Vector<Integer> asd = ...;
for (Integer lol : asd) {
// ...
}
se durante il for un altro thread chiama per esempio la add che fa, aspetta o incasina tutto?
grazie
mmm..
io penso proprio di no....
cmq spè ke vedo se trovo qualkosa x sicurezza :p
Va tutto a ramengo (quando uno è tecnico è tecnico :D).
Viene sparata una ConcurrentModificationException e il bello è che non è affatto "Concurrent". In pratica l'oggetto restituito da iterator() è usabile fintantochè non sia invocato un add (o qualsiasi metodo che comporti "mutazione strutturale") sul bersaglio dello scorrimento. A prescindere dal fatto che sia un altro Thread a produrre la mutazione.
PS.: butta l'occhio alla documentazione di java.util.Vector, l'inghippo è descritto nel quarto paragrafo.
^TiGeRShArK^
19-12-2006, 20:19
trovata :p
http://java.sun.com/j2se/1.5.0/docs/api/java/util/concurrent/CopyOnWriteArrayList.html
Va tutto a ramengo (quando uno è tecnico è tecnico :D).
Viene sparata una ConcurrentModificationException... giusto...! :doh: :doh: :doh:
grazie entrambi ^^
vBulletin® v3.6.4, Copyright ©2000-2026, Jelsoft Enterprises Ltd.