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