集合在迭代时,如果有其他线程在修改,会抛ConcurrentModificationException。这个机制就叫做fail fast。各集合都是通过modCount机制来实现。
如果某个集合被修改了,比如add、remove、set 等操作,就会对modCount++。modCount记录的就是修改次数。比如,在迭代一个ArrayList前,已经插入了10个元素,此时modCount = 10,expectedModCount就会被初始化为modCount即10。如果在修改过程中,发现modCount变了,则 throw new ConcurrentModificationException();并发修改冲突异常。
集合包下的类,大多是非线程安全的,所以内部都设计了fail fast机制,通过modCount来实现。
集合迭代器的fail-fast机制
最新推荐文章于 2022-02-23 08:55:37 发布