該異常表示迭代器迭代過程中,迭代的對象發(fā)生了改變谆棱,如數(shù)據(jù)項增加或刪除。
[解決方案]:由于迭代對象不是線程安全圆仔,在迭代的過程中垃瞧,會檢查modCount是否和初始modCount即expectedModCount一致,如果不一致坪郭,則認為數(shù)據(jù)有變化个从,迭代終止并拋出異常。常出現(xiàn)的場景是歪沃,兩個線程同時對集合進行操作嗦锐,線程1對集合進行遍歷,而線程2對集合進行增加沪曙、刪除操作闸翅,此時將會發(fā)生ConcurrentModificationException異常措近。
具體方法:多線程訪問時要增加同步鎖,或者建議使用線程安全的集合:
- 使用ConcurrentHashMap替換HashMap,CopyOnWriteArrayList替換ArrayList壳猜;
- 或者使用使用Vector替換ArrayList,Vector是線程安全的。Vector的缺點:大量數(shù)據(jù)操作時,由于線程安全髓废,性能比ArrayList低.