我的代码抛出以下异常:
java.util.ConcurrentModificationException
at java.util.LinkedList$ListItr.checkForComodification(LinkedList.java:761)
at java.util.LinkedList$ListItr.next(LinkedList.java:696)
at java.util.AbstractCollection.addAll(AbstractCollection.java:305)
at java.util.LinkedHashSet.<init>(LinkedHashSet.java:152)
...
我想要一个 ConcurrentLinkedHashSet
来修复它,
但我只在java.util.concurrent
中找到ConcurrentSkipListSet
,这是TreeSet
,不是LinkedHashSet
在 JDK6.0 中获取 ConcurrentLinkedHashSet
有什么简单的方法吗?
感谢您的帮助:)
最佳答案
ConcurrentModificationException 与您正在考虑的形式的并发无关。这仅意味着在迭代集合时,某人(可能是您自己的代码 - 这种情况经常发生 ;) )正在更改它,即添加/删除一些值。
确保您使用迭代器从集合中移除值而不是集合本身。
编辑:如果确实有另一个线程同时访问该集合,那么您从标准库获得的弱同步无论如何都是无用的,因为您必须在整个操作期间阻塞该集合,而不仅仅是为了一个添加/删除! IE。类似
synchronize(collection) {
// do stuff here
}
关于java - JDK6.0 或其他库中有Concurrent LinkedHashSet 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5290790/