(只测试了ArrayList的Iterator)
线程问题
1 不同的线程,不同的迭代器
两次通过Collection.iterator() 获取到的Iterator 是多例的.
不同线程下他们获取到不同的Iterator ,如果他们只是读取数据那么他们是互不干扰的.
如果两个线程用不同的迭代器在遍历的过程中,进行了remove或add操作那么,也会报ConcurrentModifyException.
也就是说只要当前线程迭代器在遍历的过程中,做出的增加或删除(重新赋值不会出异常)并非出自该迭代器就会报并发修改错误,
即便这个操作是该集合的其他迭代器做的.
2 不同的线程,相同的迭代器
会出现线程安全问题(比如一条线程连续迭代了几次,其余的线程再进行迭代就直接跨越到跟这条线程的当前迭代层次了)
并发修改问题
解决办法:
1 使用迭代器迭代的过程中(包括foreach方式),如果要进行增删操作,那么使用迭代器本身的操作,而非其他方式。
比如remove:要用it.remove();而非collection.remove(E e);
2 使用集合实现类本身的方法进行迭代。