您的位置:首页 > 编程语言 > Java开发

java.util.ConcurrentModificationException异常的解决实例

2010-07-19 17:29 561 查看
我们知道,对于Collection而言,在对其iterator的过程中,是不能调用Collection的remove等方法的,这样会报java.util.ConcurrentModificationException异常,通常用iterator的remove方法来达到目的,示例程序如下:

List<String> list = new ArrayList<String>();
for (int i = 0; i < 10; i++) {
String str = "td" + i;
list.add(str);
}
for (Iterator it = list.iterator(); it.hasNext();) {
String str = (String) it.next();
if (str.equals("td5")) {
// list.remove(str);  // 删除方法一
it.remove();  // 删除方法二
}


但是今天在公司写的代码,忽然报出了java.util.ConcurrentModificationException异常,只是普通的遍历一个list,添加一个userid到set中,代码如下:

Set<String> set = new HashSet<String>();
if (activities != null) {
for (Activity tx : activities) {
set.add(tx.getUserID());
}
}


这个情况下就会报出ConcurrentModificationException异常,令人百思不得其解。

调试了很久,也写了一个示例程序,忽然发现,程序是在多线程环境下,这样,set是非线程安全的,因此,给其加上锁就行了,好简单,唉。

Set<String> set = new HashSet<String>();
if (activities != null) {
synchronized (set) {
for (Activity tx : activities) {
set.add(tx.getUserID());
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: