- ConcurrentModificationException问
- ConcurrentModificationException
- ConcurrentModificationException
- ConcurrentModificationException
- ConcurrentModificationException异
- 从ConcurrentModificationException
- 抛ConcurrentModificationException
- ConcurrentModificationException并
- ConcurrentModificationException-
- ConcurrentModificationException异
结论:此问题:出现此问题说明多个线程同时操作一个Linkedlist,或单线程下使用list的remove等方法且没有更新迭代器中的expectedModCount
解决:单线程下如存在renmove调用,应改为使用迭代器remove;
多线程下应改用相关多线安全集合。
源码分析:
list内部iterator初始化时,会把list中的modcount赋给expectedModCount
![](https://img.haomeiwen.com/i18383899/3b927fab4b818833.jpg)
而当遍历时其他线程或本线程调用list相关方法操作了该集合,list中modcount会每次自增1
![](https://img.haomeiwen.com/i18383899/7c9a79f0d66c3c5d.jpg)
而而iterator.next会先对两个值进行比对,如果不相等,从而该异常
![](https://img.haomeiwen.com/i18383899/c9dd4e130d9d6019.jpg)
![](https://img.haomeiwen.com/i18383899/a4c9c523ff3ab64f.jpg)
网友评论