在我正在处理的多线程应用程序中,我们偶尔会ConcurrentModificationExceptions
在列表中看到(主要是ArrayList
,有时是向量)。但在其他时候,我认为正在发生并发修改,因为迭代集合似乎缺少项目,但没有抛出异常。我知道文档ConcurrentModificationException
说您不能依赖它,但是我将如何确保我不会同时修改列表?并且将每个对集合的访问包装在同步块中是防止它的唯一方法吗?
更新:是的,我知道Collections.synchronizedCollection
,但它不能防止有人在您迭代集合时修改集合。我认为至少我的一些问题正在发生,当有人在我迭代它时向集合中添加了一些东西。
第二次更新 如果有人想把提到的 synchronizedCollection 和像 Jason 那样的克隆与提到的 java.util.concurrent 和 jacekfoo 和 Javamann 这样的 apache 集合框架结合起来,我可以接受一个答案。