本帖最后由 Lin0411 于 2014-5-4 11:07 编辑
再学习多线程的时候提到CopyOnWriteArrayList能消除并发情况下对集合进行遍历操作时的风险。
例如如下代码:
public class test
{
public static void main(String[] args)
{
List<String> list = new ArrayList<String>();
list.add("a");
list.add("b");
list.add("c");
Iterator<String> it = list.iterator();
while(it.hasNext())
{
String string = (String)it.next();
if("a".equals(string))
{
list.remove(string);
}
else
{
System.out.println(string);
}
}
}
}
编译器会报异常,若改为 if("b".equals(string))则不会报错,但输出结果只有a,能解释一下原因是什么吗?
另外若将ArrayList改为CopyOnWriteArrayList则没有问题,CopyOnWriteArrayList能消除并发风险的原理有点搞不懂,望大神指点。 |