gpt4 book ai didi

java - 什么是允许 Collections.sort 的线程安全 List 实现

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:40:48 26 4
gpt4 key购买 nike

我必须编写一个需要列表的程序。此列表在其实现中需要是线程安全的(主要是为了避免 ConcurrentModificationException),但还需要允许出于 API 原因,要应用的 Collections.sort() 方法。

CopyOnWriteArrayList 实现了前者,而不是后者,我能找到的其他实现允许后者而不是前者。

Java 有适合我的列表实现吗?

编辑:需要注意的重要一点是,不幸的是我的代码需要与 Java 6 兼容。

最佳答案

我想知道这在概念层面上是否真的可行:为了使 排序 操作保持一致,我希望整个 列表被阻止进行任何添加/在排序进行时删除。

但 Collections.sort() 并不知道它在工作时需要锁定整个列表。你给它一个列表,如果另一个线程试图同时修改这个列表……祝你好运。

或者如果你反过来看:一个“线程安全”的列表应该如何理解它现在正处于被排序的过程中;所以 - 一些访问(比如交换元素)没问题;但其他(如添加/删除)元素不是?!

换句话说:我认为你只能这样做:选择任何“线程安全”列表实现;然后你必须将你自己的包装器放在适当的位置

  1. “锁定”更改列表
  2. 分类是否有效
  3. “解锁”列表

当然还有“2”。您可以自由地转向 Collections.sort()。

或者,如果您使用的是 Java8 - 您可以使用 CopyOnWriteArrayList 及其已实现的 sort() 方法(这在一定程度上证明了我的观点:只有您才能正确排序在运行排序操作时拥有列表!)。

给出您的最新评论:当然,您可以手动将 Java8 版本的 CopyOnWriteArrayList“反向移植”到您的环境中并使用它;但当然,这无济于事;据我了解,Java6-Collections.sort() 不会从该类调用新的 sort() 方法。

所以,你的要求总和,好像解决不了;并且您将不得不硬着头皮在自己的代码中完成大部分工作。

关于java - 什么是允许 Collections.sort 的线程安全 List 实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39073076/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com