【发布时间】:2016-08-03 21:26:03
【问题描述】:
我有一个由 Java 中的 ConcurrentSkipListSet 制成的对象 QueueSet
请注意,与大多数集合不同,size 方法不是恒定时间操作。由于这些集合的异步特性,确定当前元素的数量需要遍历元素,因此如果在遍历期间修改了此集合,则可能会报告不准确的结果。此外,不能保证以原子方式执行批量操作 addAll、removeAll、retainAll、containsAll、equals 和 toArray。例如,与 addAll 操作同时运行的迭代器可能只查看一些添加的元素。
问题:对此if(!activeQueueSet.add(queue)) 的完整性检查存在缺陷,但正如您从文档中看到的那样,它是一个 O(n) 操作,即遍历了整个集合,这在某种程度上误解了列举了很多次。我正在寻找一个万无一失的健全性检查。
【问题讨论】:
-
我不清楚你在问什么。
size不是常数时间操作这一事实与检查add方法是否返回正确的值有什么关系?
标签: java concurrency queue sanity-check