迭代器相关

(只测试了ArrayList的Iterator)

                                                                        线程问题

1 不同的线程,不同的迭代器

两次通过Collection.iterator() 获取到的Iterator 是多例的.

不同线程下他们获取到不同的Iterator ,如果他们只是读取数据那么他们是互不干扰的.

如果两个线程用不同的迭代器在遍历的过程中,进行了remove或add操作那么,也会报ConcurrentModifyException.

也就是说只要当前线程迭代器在遍历的过程中,做出的增加或删除(重新赋值不会出异常)并非出自该迭代器就会报并发修改错误,

即便这个操作是该集合的其他迭代器做的.


2 不同的线程,相同的迭代器

会出现线程安全问题(比如一条线程连续迭代了几次,其余的线程再进行迭代就直接跨越到跟这条线程的当前迭代层次了)


                                                                        并发修改问题

解决办法:

1 使用迭代器迭代的过程中(包括foreach方式),如果要进行增删操作,那么使用迭代器本身的操作,而非其他方式。

比如remove:要用it.remove();而非collection.remove(E e);

2 使用集合实现类本身的方法进行迭代。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值