实现Iterable接口,创建一个轻量级的迭代器,用于安全的遍历元素、移除元素、添加元素。允许对象成为for-each循环的目标。其中涉及fail-fast机制。
遍历的方式
1. for(object o : list){}
2. list.foreach();
3. Iterator it = col.Iterator();
for(it.hasNext){it.next();}
fail-fast(快速失败)机制
是集合中检测错误机制。集合的结构发生变化,可能会抛出ConcurrentModificationException异常。
出现该异常原因,如在遍历期间list.romove(i)或list.add(i)。ArrayList的iterator()方法的具体实现返回Itr对象,Itr的hasNext()方法是检查游标索引是否等于list的长度。next()方法会检查list修改次数是否等于初始值的方法,不等于会抛出ConcurrentModificationException异常。在遍历期间变更会增加修改次数而初始值为零导致两者值不等,抛出异常。
解决方案
1)使用synchronized或者Lock进行同步iterator的迭代;
2)使用并发线程安全的集合迭代,如并发容器CopyOnWriteArrayList或者ConcurrentHashMap。