Copy-on-Iterate java 代码风格

Copy-on-Iterate 是一种iterate collection 通用的一种写法
for(Iterator i = new ArrayList(collection).iterator(); i.hasNext();) {...}

这种写法是在使用集合(collections)时有可能会出现一个问题,就是当我们重复迭代这个集合时,如果这个集合不巧被修改了(通常是被另外的线程),程序就会抛出ConcurrentModificationException异常。这是为了防止Iterator上的不可预期的操作行为。为了避免这个问题,Copy-on-Iterate上面的写法就是一种共识的习惯用法

但是在jdk1.6以前(如果jdk1.6以后不用担心这个问题) 还是会因为线程的问题出现ArrayIndexOutOfBoundsException异常

具体可以参考
http://www.aqee.net/2010/08/10/copy-on-iterate-java-idiom-considered-broken/
或者用“Copy-on-Iterate” 在google中检索

文章中建议解决方法
一个办法是在整个循环上加上同步锁,但这就会限制你只能当和其它线程在同一个同步区内才能访问这个集合。
还有一个简单的解决方案,就是使用像下面这样使用 toArray()方法:
for (Iterator i = Arrays.asList(collection.toArray()).iterator(); i.hasNext();)