迭代器实现中的线程安全问题

如果考虑到多线程访问,当一个线程正在迭代某个集合,而另一个线程修改了集合的内容时,

设计方向:

1. 直接抛异常,ConcurrentModificationException,如HashMap;

2. 可正常迭代:

        a. 不能保证数据一致性;如ConcurrentHashMap,(虽然迭代算法没看懂)迭代过程中有可能包括新更新的数据,有可能存在旧数据;

        b. 能保证数据一致性:

                b.1 snapshot;如CopyOnWriteArray,反映的是迭代器创建时刻的数据;

                b.2 同步;如Vector,synchronized修饰迭代方法;

建议:

1. 首先迭代器不是设计为给多个线程中共享使用的,即在单线程中使用;

2. 建议对集合对象加锁,同步迭代(遍历);


版权声明:本文为xerjava原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。