use*_*476 18 java collections for-loop list synchronized
有关synchronizedList的文档说明,
当迭代它时,用户必须手动同步返回的列表:
List list = Collections.synchronizedList(new ArrayList());
...
synchronized(list) {
Iterator i = list.iterator(); // Must be in synchronized block
while (i.hasNext())
foo(i.next());
}
Run Code Online (Sandbox Code Playgroud)
不遵循此建议可能会导致非确定性行为.
这看起来很清楚,但我只是想确认每个循环都是禁止的.例如,我不能做如下的事情吧?
List<MyType> list = Collections.synchronizedList(new ArrayList(<MyType>));
...
synchronized(list){
for(MyType m : list){
foo(m);
m.doSomething();
}
}
Run Code Online (Sandbox Code Playgroud)
Jon*_*eet 29
是的,您可以 - 您的增强for循环与显式使用迭代器的代码基本相同.它归结为相同的代码 - 它只是调用iterator()然后在调用next()和hasNext()调用之间交替.