java - JDK6.0 或其他库中有Concurrent LinkedHashSet 吗?

标签 java java.util.concurrent

我的代码抛出以下异常:

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/

相关文章:

java - 使用 JdbcTemplate 和 BlockingQueue 同时提取和插入数据库

java - 使用多线程顺序打印语句

java - Java 中的 ConcurrentHashMap 锁定机制用于 computeIfPresent

java - 即使未调用默认构造函数,显式构造函数仍然具有默认值。

java - struts2中如何获取xml作为响应

java - 卡在 java.net.SocketInputStream.socketRead0(Native Method)

java - Swing JProgressBar 没有像我期望的那样重绘

java - 列出 ConcurrentModificationException

java - 过滤延迟初始化集合

java - 动态更改 ThreadPoolExecutor 的 corePoolSize