我有一个从网络服务返回的我定义的对象列表(network svc 将更新此列表)。在某个时间点,我想在我的列表视图中呈现我已经拥有的内容。我有以下代码:
List<MyObject> myObjects = MyService.getInstance().getListOfMyObject()
而且因为我有另一个线程会更新 myObjects 列表,所以我想避免并发修改异常。我有:
List<MyObject> clonedList = null;
synchronized(myObjects){
clonedList = MyListUtils.cloneList(myObjects)
}
MyListUtils 中的 cloneList() 函数以简单的方式实现:
public static <T extends ICloneable<T>> List<T> cloneList(final List<T> source){
List<T> result = new ArrayList<T>();
for(T t : source){
T newObject = t.clone();
result.add(newObject);
}
return result;
}
- 不要关心 ICloneable 接口,我用这个 ICloneable 来标记东西。
我得到了这个例外
03-11 16:07:11.370: E/AndroidRuntime(8076): FATAL EXCEPTION: main
03-11 16:07:11.370: E/AndroidRuntime(8076): java.util.ConcurrentModificationException
03-11 16:07:11.370: E/AndroidRuntime(8076): at java.util.ArrayList$ArrayListIterator.next(ArrayList.java:569)
03-11 16:07:11.370: E/AndroidRuntime(8076): at xxx.utilities.MyListUtils.cloneList(CollectionUtils.java:120)
我不知道它有什么问题?我没有调用任何函数来修改对象,我只是“克隆”它,据我所知,这不会改变我对象中的任何一个位。任何想法表示赞赏,谢谢。