1.迭代器的问题
无论是直接迭代还是for-each循环(for-each内部也是用迭代器实现)语句,对容器迭代的标准方式都是Iterator。但是,即使是使用迭代器,也无法避免在迭代器在迭代期间对容器加锁。这是因为设计同步容器的迭代器时并没有考虑并发修改的问题。
它们表现出的行为是及时失败的,也就是容器在迭代的过程中如果被修改,就会抛出ConcurrentModificationException失败。
例如:
List<Integer> lists = new ArrayList<>();
lists.add(1);
lists.add(2);
for(Integer i : lists){
System.out.println(i);
}
问题:上面这样做在其他线程进行修改时,容易出现ConcurrentModificationException,因此必须要在迭代过程中使用锁。
List<Integer> lists = new ArrayList<>();
lists.add(