Документация по synchronizedList гласит, что
Обязательно, чтобы пользователь вручную синхронизировал возвращаемый список при его итерации по нему:
List list = Collections.synchronizedList(new ArrayList());
...
synchronized(list) {
Iterator i = list.iterator(); // Must be in synchronized block
while (i.hasNext())
foo(i.next());
}
Несоблюдение этого совета может привести к недетерминированному поведению.
Это кажется довольно ясным, но я просто хотел подтвердить, что для каждого цикла запрещено. Например, я не могу сделать что-то вроде следующего, верно?
List<MyType> list = Collections.synchronizedList(new ArrayList(<MyType>));
...
synchronized(list){
for(MyType m : list){
foo(m);
m.doSomething();
}
}