【错误原因】
对于remove操作,list.remove(o)的时候,只将modCount++,而expectedCount值未变,那么迭代器在取下一个元素的时候,发现该二值不等,则抛ConcurrentModificationException异常。 对于add操作,同remove 具体可以参看这里:http://hi.baidu.com/sdausea/blog/item/57b2fa3dcb101908bba1672e.html 【解决办法】
remove:用iterator提供的原生态remove() add:同remove就错了,iterator没有提供原生的add()方法。真是的,还要用新的容器暂存,然后再遍历结束后,全部添加到原容器当中。
set/list:这两类常用容器,就用上面说的方法remove(), add()就好了。
map:直接使用ConcurrentHashMap就ok。为什么别的容器,不也实现个concurrent版本直接用。。?库里不搞,自己搞。
【正确使用案例】
for (Iterator it = list.iterator(); it.hasNext()) { String val = it.next(); if (val.equals(“5”)) { it.remove(); } } List newList = new ArrayList(); for (Iterator it = list.iterator(); it.hasNext()) { String val = it.next(); if (val.equals(“5”)) { newList.add(val); } } list.addAll(newList);