Normalmente no, porque usted no está cambiando el estado interno de la colección en este caso. Cuando itera sobre la colección, se crea una nueva instancia del iterador y el estado de la iteración es por instancia de iterador.
Aparte nota: Recuerde que al mantener una colección de sólo lectura que están impidiendo única modificación a la propia colección. Cada elemento de colección es aún modificable.
class Test {
public Test(final int a, final int b) {
this.a = a;
this.b = b;
}
public int a;
public int b;
}
public class Main {
public static void main(String[] args) throws Exception {
List<Test> values = new ArrayList<Test>(2);
values.add(new Test(1, 2));
values.add(new Test(3, 4));
List<Test> readOnly = Collections.unmodifiableList(values);
for (Test t : readOnly) {
t.a = 5;
}
for (Test t : values) {
System.out.println(t.a);
}
}
}
Este salidas:
5
5
consideraciones importantes a partir answser @WMR.
Depende de si los hilos que son lectura de su colección se inician antes o después de que haya llenarlo. Si que están comenzaron antes de llenarlo, tiene ninguna garantía (sin de sincronización), que estos hilos van a ver los valores actualizados.
La razón de esto es la modelo de memoria de Java, si usted quiere saber más, lea la sección "visibilidad" en el siguiente enlace: http://gee.cs.oswego.edu/dl/cpj/jmm.html
E incluso si se ponen en marcha los hilos después de completar su colección , que que tenga que sincronizar debido a que su aplicación colección podría cambiar su estado interno leer incluso en operaciones (gracias Michael Bar-Sinai, no sabía que existían esas colecciones ).
Otra lectura muy interesante sobre el tema de concurrencia que cubre temas como la publicación de los objetos, visibilidad, etc. con mucho más detalle es el libro de Brian Goetz Java Concurrency in Practice.
Esta respuesta no es incorrecta, pero tampoco es suficiente. La respuesta de @WMR tiene algunas advertencias adicionales importantes. En particular, debe considerar la cuestión de asegurarse de que los hilos del lector realmente verán los valores escritos al inicio, ya sea mediante publicación segura o alguna barrera de memoria –
Ver @ WMR y mis respuestas a continuación ... esta respuesta es incorrecta, como obtener() las acciones podrían transformar el estado interno en las colecciones (p. ej., cachés, últimas estadísticas tocadas, etc.). –
@Alex Miller: Creo que la respuesta no solo no es suficiente, claramente dice "No" sin enumerar ninguna condición para este no. Y esto está mal (y como probablemente sepa que es peligroso si confía en él). – WMR