java - ConcurrentSkipListSet 和重新排序 (java)

标签 java list sorting concurrency

我正在使用一个 ConcurrentSkipListSet,它显然是通过多个线程访问的。现在,底层对象的 compareTo 方法使用的值会随着时间的推移而改变。因此,我想“更新”列表的顺序(通过求助它或类似的东西)。

但是,java.util.Collections.sort(list) 不起作用,仅重建列表可能太慢(并且会破坏整个并发性)。我应该考虑其他解决方案吗?

它不一定会导致最佳排序(这对于并发性和不断变化的值来说几乎是不可能的)。接近最优就足够了,只要任何删除/添加调用保持线程安全(这在排序时重建列表时将是一个真正的问题)。

最佳答案

每次您编辑一个项目时,它的排序顺序可能会发生变化,您必须从列表中删除它然后更改键,然后重新插入它。


Azul Systems 的 Cliff Click 博士有一个 very nice presentation他们如何使用墓碑等进行无锁哈希表。如果您打算编写自己的跳过列表/树以将项目重新排序为单个操作(希望速度更快),那么您也可以采用这种无锁路线。并确保分享您的结果:)

关于java - ConcurrentSkipListSet 和重新排序 (java),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8133416/

相关文章:

java - "Unparseable date"使用带有 API 代码示例的 SimpleDateFormatter

java - 使用 Java 代码将图像下载到本地计算机时图像分辨率会降低

python - 向嵌套列表添加特定值

java - 在JAVA中按顺序将多个mp3文件连接成1个mp3文件

java - java中使用高阶函数重写抽象方法

javascript - 如何将freemarker列表中包含特殊字符的复杂元素解析为javascript数组

list - 大于 X 的第一个元素的索引(Prolog)

java - 合并排序与选择排序

java - 为什么更新/更快的 Java 8 排序方式更糟糕?

xml - 按属性对 XML 进行排序和修改