【发布时间】:2013-03-29 12:52:25
【问题描述】:
我一直在阅读《Effective Java》第 60 条,即“赞成使用标准异常”。
另一个值得了解的通用异常是 ConcurrentModificationException。如果为单线程或外部同步而设计的对象检测到它正在同时被修改。
当人们在循环时尝试从集合中删除时,通常会遇到CME。
但是在这里我感兴趣的是检测对自我实现的类对象的并发修改的简洁示例?
我希望它类似于在内部对象和相关的布尔标志上同步,如果另一个线程遇到标志为假,则抛出异常。
对于我在ArrayList 的来源中找到的一个简单研究:
final void checkForComodification() {
if (modCount != expectedModCount)
throw new ConcurrentModificationException();
}
但是modCount 背后的原理是如何维护的。我找不到它被递减的地方。
【问题讨论】:
-
在
add例如,你有这行:ensureCapacityInternal(size + 1); // Increments modCount!! -
@assylias,我期待跟踪使用它的线程数。一旦一个线程停止使用它,那么 number 应该减少。但现在我知道它计算修改次数。
标签: java multithreading concurrency exception-handling concurrentmodification