新整理CopyOnWriteArrayList

下面举一个发生ConcurrentModificationException异常的例子: 示例1: List list = new ArrayList(); for(Iterator iter = list.iterator(); iter.hasNext();) { Object obj = iter.next(); ... if(***) { list.remove(obj); } } 在执行了remove方法之后,再去执行循环,iter.next()的时候,报java.util.ConcurrentModificationException(当然,如果remove的是最后一条,就不会再去执行next()操作了) 在这种情况下,CopyOnWriteArrayList就排上用场了,CopyOnWriteArrayList是ArrayList的一个线程安全的变体,即可在并发中使用。而它的可变操作都是通过对ArrayList中存储的数组通过一次新的复制来实现的。换用CopyOnWriteArrayList实现,可以避免这种情况的发生: 示例2: List list = new CopyOnWriteArrayList(); for(Iterator iter = list.iterator(); iter.hasNext();) { Object obj = iter.next(); ... if(***) { list.remove(obj); } } CopyOnWriteArrayList适用于访问操作远多于修改操作的情况。

posted @ 2013-04-07 09:44  clunyes  阅读(158)  评论(0编辑  收藏  举报