Документация по синхронному списку утверждает, что
обязательно, чтобы пользователь вручную синхронизировал в возвращенном списке при итерации по нему:
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();
}
}