2

假设我有一组从客户端发送到服务器的请求 ID 散列。服务器的响应返回我发送的请求 ID,然后我可以将其从哈希集中删除。这将以多线程方式运行,因此多个线程可以在哈希集中添加和删除 ID。但是,由于生成的 ID 是唯一的(来自线程安全源,假设AtomicInteger现在为每个新请求更新),是否HashSet需要 a ConcurrentHashSet

我认为这可能导致问题的唯一情况是,如果HashSet遇到可能需要对底层HashSet对象进行数据结构更改的冲突,但在这个用例中似乎不会发生这种情况。

4

1 回答 1

3

是的。例如,由于哈希表的底层数组可能需要调整大小,而且当然 ID 可能会发生冲突。因此,拥有不同的密钥根本无济于事。

但是,由于您知道 ID 正在增加,并且您是否可以设置未完成 ID 的最大数量的上限(假设为 1000)。您可以使用上限和下限以及具有从最低键开始的偏移索引的固定大小数组,在这种情况下,您将不需要任何互斥锁或并发数据结构。然而,这样的数据结构非常脆弱,因为如果你有更多的上限,那么你的地狱就会崩溃。因此,除非关注性能,否则只需使用ConcurrentHashSet.

于 2013-08-18T19:11:50.370 回答