一、简介
fail-fast,即快速失败,Java集合的一种错误检测机制。当多个线程对集合(非fail-fast的集合类)进行结构上的改变的操作时有可能会抛出ConcurrentModificationException(当方法检测到对象的并发修改,但不允许这种修改,单线程也会)
二、示例
在Foreach循环中删除元素时发生该错误。
原因:
集合中的modCount与集合的iterator中的expectedModCount不相等。
当一次集合中的元素时modCount值改变但是expectedModCount的值没更新。
(foreach循环实际上在编译时会被转换成为while和iterator的操作)
解决方法
1、直接使用普通的for循环:没有遇到iterator的遍历,不执行fail-fast
的检验
2、使用Iterator进行操作:更新集合中的modCount的同时又更新了iterator的expectedModCount的值。
3、使用java8中提供的filter过滤
网友评论