快速失败机制“fail-fast”

新知榜官方账号

2023-09-18 19:52:18

快速失败机制“fail-fast”

“fail-fast”是java集合的一种错误检测机制,当多个线程对集合进行结构上的改变的操作时,有可能会产生fail-fast机制。

举例假设存在两个线程(线程1、线程2)线程1通过Iterator在遍历集合A中的元素,在某个时候线程2修改了集合A的结构(是结构上面的修改,而不是简单的修改集合元素的内容),那么这个时候程序就会抛出ConcurrentModificationException异常,从而产生fail-fast机制。

为什么会产生并发修改异常ConcurrentModificationException?在迭代器中维护了两个变量intmodCount与intexpectedmodCount,在迭代器中,两个值默认是相等的.集合在被遍历期间如果内容发生变化,就会改变modCount的值.当使用迭代器中的next()/remove时,遍历下一个元素之前,会先调用checkForComodification进行检测在checkForComodification方法当中通过modCount与expectedModCount两个值是否相等来判断当前集合有没有被被修改过,如果修改过,就会抛出并发修改异常建议使用迭代器中的方法,在迭代器中的删除方法中,会重新设置modCount与expectedModCount的值

迭代时如何避免并发修改异常?

  1. 在遍历过程中,所有涉及到改变modCount值的地方全部加上synchronized。
  2. 使用CopyOnWriteArrayList来替换ArrayList
  3. 使用迭代器中的方法

本页网址:https://www.xinzhibang.net/article_detail-12229.html

寻求报道,请 点击这里 微信扫码咨询

关键词

fail-fast java集合 并发修改异常

分享至微信: 微信扫码阅读

相关工具

相关文章