如果考虑到多线程访问,当一个线程正在迭代某个集合,而另一个线程修改了集合的内容时,
设计方向:
1. 直接抛异常,ConcurrentModificationException,如HashMap;
2. 可正常迭代:
a. 不能保证数据一致性;如ConcurrentHashMap,(虽然迭代算法没看懂)迭代过程中有可能包括新更新的数据,有可能存在旧数据;
b. 能保证数据一致性:
b.1 snapshot;如CopyOnWriteArray,反映的是迭代器创建时刻的数据;
b.2 同步;如Vector,synchronized修饰迭代方法;
建议:
1. 首先迭代器不是设计为给多个线程中共享使用的,即在单线程中使用;
2. 建议对集合对象加锁,同步迭代(遍历);
本文探讨了多线程环境下集合类的迭代问题,分析了不同策略如抛出异常、保证一致性和同步迭代的优缺点。建议在多线程场景下,避免共享迭代器并采取加锁同步措施来确保数据安全。
10万+

被折叠的 条评论
为什么被折叠?



