如下
func(){
List list = Collections.synchronizedList(new ArrayList());
...
synchronized (list) {
Iterator i = list.iterator(); // Must be in synchronized block
while (i.hasNext())
foo(i.next());
}
...
}
javadoc 说用 synchronizedList 的时候,如果有迭代器,就必须对这个对象加 synchronized()同步方法 网上解释, synchronizedList 在迭代的时候,需要开发者自己加上线程锁控制代码,因为在整个迭代的过程中如果在循环外面不加同步代码,在一次次迭代之间,其他线程对于这个容器的 add 或者 remove 会影响整个迭代的预期效果,所以这里需要用户在整个循环外面加上 synchronized(list);
假设有另一个线程在不进行 synchronized (list)的情况下对 list 进行修改的话呢?岂不是上面的 synchronized (list) 没用?