gpt4 book ai didi

java - 当抛出 throws 'ConcurrentModificationException' 时,快速失败迭代器如何知道底层结构已修改?

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:47:07 30 4
gpt4 key购买 nike

Fail-fast Iterators 在意识到 Collection 的结构自迭代开始以来已发生变化时立即失败。结构更改意味着在一个线程迭代该集合时从集合中添加、删除或更新任何元素。

但是它是如何知道变化的呢?

最佳答案

刚刚检查了 HashMap 类的源代码。特别是搜索“modCount”。例如,私有(private) HashIterator 类会记录自创建实例以来实例被修改的次数(使用“删除”方法除外)。

对于“nextEntry”方法,检查计数以查看它是否已更改并可能抛出该异常。 'remove' 方法也会检查计数,但如果成功,会将计数重置为新值。它这样做是为了让您可以使用“删除”方法删除条目而不会出现异常。

其他方法(例如“clear”)将增加“modCount”。正如上面的代码摘录所示,这将导致在下一次调用“nextEntry”时引发异常。

不保证会抛出异常。

API:

http://docs.oracle.com/javase/7/docs/api/java/util/ConcurrentModificationException.html

Note that fail-fast behavior cannot be guaranteed as it is, generally speaking, impossible to make any hard guarantees in the presence of unsynchronized concurrent modification. Fail-fast operations throw ConcurrentModificationException on a best-effort basis. Therefore, it would be wrong to write a program that depended on this exception for its correctness: ConcurrentModificationException should be used only to detect bugs.

关于java - 当抛出 throws 'ConcurrentModificationException' 时,快速失败迭代器如何知道底层结构已修改?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23171977/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com