用于循环的 Java 同步列表
2022-09-01 20:50:04
synchronizedList 上的文档指出,
用户在迭代返回的列表时必须手动同步该列表:
List list = Collections.synchronizedList(new ArrayList());
...
synchronized(list) {
Iterator i = list.iterator(); // Must be in synchronized block
while (i.hasNext())
foo(i.next());
}
不遵循此建议可能会导致非确定性行为。
这似乎很清楚,但我只是想确认 for each 循环是被禁止的。例如,我不能做这样的事情,对吧?
List<MyType> list = Collections.synchronizedList(new ArrayList(<MyType>));
...
synchronized(list){
for(MyType m : list){
foo(m);
m.doSomething();
}
}