gpt4 book ai didi

java - 如何在自己的类中模拟 ConcurrentModificationException?

转载 作者:行者123 更新时间:2023-12-01 14:15:21 26 4
gpt4 key购买 nike

我一直在看《Effective Java》Item 60,就是“Favor the use of standard exception”。

Another general-purpose exception worth knowing about is ConcurrentModificationException. This exception should be thrown if an object that was designed for use by a single thread or with external synchronization detects that it is being concurrently modified.

通常人们在循环时尝试从集合中删除时会遇到 CME

但在这里,我感兴趣的是检测自实现类对象并发修改的简明示例是什么?

我希望它类似于同步内部对象和相关的 boolean 标志,如果另一个线程遇到标志为假,则抛出异常。

我在 ArrayList 的源代码中找到了一个简单的研究:

 final void checkForComodification() {
if (modCount != expectedModCount)
throw new ConcurrentModificationException();
}

但是 modCount 背后的原则是如何维护的。我找不到它在哪里减少。

最佳答案

修改计数本质上是 "revision number"集合的状态。每次对集合进行结构更改时,它都会递增。它永远不会减少。

开始迭代时,迭代器会记住 mod count 的值。然后它会定期检查容器的当前 mod 计数是否仍然等于记住的值。如果不是——意味着自迭代开始以来结构发生了变化——将抛出一个 ConcurrentModificationException

关于java - 如何在自己的类中模拟 ConcurrentModificationException?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15703639/

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