En Java: ¿Es List.iterator()
seguro para subprocesos, es decir, el iterador devuelto refleja el estado actual de la lista en cualquier momento o solo el estado de la lista en el momento de su creación?¿List-it() es seguro para subprocesos?
Respuesta
El comportamiento de List.iterator() no está definido o es coherente con las diferentes implementaciones de List.
Para ArrayList, LinkedList, puede obtener una ConcurrentModificationException si la lista se modifica cuando está iterando sobre ella. (Esto no está garantizado) La forma de evitar este problema es usar una synchronizedList() y bloquear la lista mientras se itera sobre ella.
Para Vector, la colección está sincronizada, pero el iterador no es seguro para subprocesos.
Para CopyOnWriteArrayList, obtiene una instantánea de los elementos de la lista en el momento en que llama a iterator(), este iterador es seguro para subprocesos y no necesita usar ningún bloqueo. Nota: el contenido de los elementos puede cambiar.
Ningún iterador es seguro para subprocesos. Si la colección subyacente se cambia en medio de la iteración, se lanza un ConcurrentModificationException
.
Incluso los iteradores de colecciones sincronizadas no son seguros para subprocesos: tiene que sincronizar manualmente.
Una excepción es CopyOnWriteArrayList
, que contiene una instantánea durante la iteración.
- 1. NSTimer ¿es seguro para subprocesos?
- 2. ¿PrintWriter es seguro para subprocesos?
- 3. Enum.TryParse - ¿es seguro para subprocesos?
- 4. ¿Es PHP seguro para subprocesos?
- 5. ¿MongoDB es seguro para subprocesos?
- 6. ¿Es itertools seguro para subprocesos?
- 7. ¿DWScript es seguro para subprocesos?
- 8. ¿SQLite.Net es seguro para subprocesos?
- 9. ¿Es System.ServiceModel.Channels.BufferManager seguro para subprocesos?
- 10. ¿HttpContext.Current.Cache es seguro para subprocesos?
- 11. ¿SecureRandom es seguro para subprocesos?
- 12. ¿Stream.Write es seguro para subprocesos?
- 13. EventAggregator, ¿es seguro para subprocesos?
- 14. guava-libraries: ¿es Iterators.cycle() seguro para subprocesos?
- 15. ¿Es TimeZone de Java seguro para subprocesos?
- 16. Java Transport.send() ¿es seguro para subprocesos?
- 17. C socket API es seguro para subprocesos?
- 18. Log4Net FileAppender no es seguro para subprocesos?
- 19. ¿Este código es seguro para subprocesos? ¿Cómo puedo hacer que sea seguro para subprocesos?
- 20. C++ Segmento seguro para subprocesos
- 21. C# Singleton seguro para subprocesos
- 22. malloc() no es reentrante pero es seguro para subprocesos?
- 23. ¿Es HashMap seguro para subprocesos para diferentes claves?
- 24. ¿Es seguro leer de varios subprocesos?
- 25. ¿El operador + = es seguro para subprocesos en Python?
- 26. ¿Por qué este código no es seguro para subprocesos?
- 27. Fábrica de objetos singleton: ¿este código es seguro para subprocesos?
- 28. ¿El retorno de rendimiento en C# es seguro para subprocesos?
- 29. ¿DocumentBuilderFactory es seguro para subprocesos en Java 5+?
- 30. Integración de Spring & Tika: ¿mi enfoque es seguro para subprocesos?
"Ningún iterador es seguro para subprocesos excepto uno" podría haberse escrito como "Todos son seguros para subprocesos, excepto dos o tres";) –
Si la colección subyacente se cambia durante la iteración por otra cadena, CME puede lanzarse o no arrojado, ya que el contador de modificación interna no es atómico. – Anton