【发布时间】:2013-02-26 09:38:51
【问题描述】:
我有一个从网络服务返回的我定义的对象列表(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)
不知道有什么问题?我没有调用任何函数来修改对象,我只是“克隆”它,据我所知,这不会改变我对象中的任何一个位。 任何想法表示赞赏,谢谢。
【问题讨论】:
标签: android list exception object concurrency