Estoy viendo este fragmento de código. Este constructor delega en el método nativo "System.arraycopy"Java - Seguridad de subprocesos de los constructores de ArrayList
¿Es seguro el subproceso? Y con eso quiero decir ¿puede lanzar alguna vez una ConcurrentModificationException?
public Collection<Object> getConnections(Collection<Object> someCollection) {
return new ArrayList<Object>(someCollection);
}
lo hace ninguna diferencia si la colección se está copiando es threadsafe por ejemplo, un CopyOnWriteArrayList?
public Collection<Object> getConnections(CopyOnWriteArrayList<Object> someCollection) {
return new ArrayList<Object>(someCollection);
}
Editar: Soy consciente de que threadsafe = ConcurrentModificationException!. Estoy tratando de tomar una instantánea de los datos en un punto en el tiempo. Por lo tanto, si otro subproceso escribe en alguna colección a mitad de camino a través de la copia, no me importa si el resultado tiene el nuevo objeto o no. Sólo que no quiere que se lance un ConcurrentModificationException o peores
Eso no es un problema teórico: el comportamiento impredecible * ocurrirá *. El único punto de incertidumbre es * con qué frecuencia * ocurrirá. –
@Stephen: tienes razón, pero reproducir errores de escritura fuera de orden es extremadamente difícil. Solo encontré un ejemplo en el siguiente artículo: http://www.cs.umd.edu/~pugh/java/memoryModel/DoubleCheckedLocking.html –
¡Difícil de reproducir! = Teórico. Además, algunos ejemplos se describen en páginas web! = Teórico. :-) –