java - 实现非阻塞线程安全列表

标签 java list thread-safety nonblocking

是否可以使用 ConcurrentHashMap 作为支持来实现非阻塞线程安全列表,其中使用索引作为键,元素作为值?

最佳答案

可能吗?

答案是,这取决于您需要什么列表功能。

  • 如果您只是想在“列表”上执行类似数组的操作(例如,获取或设置给定索引处的元素),那么就可以完成。

  • 如果您想要执行诸如插入或删除元素或按顺序迭代列表元素之类的操作,则该操作必须是阻塞的,并且通常会很昂贵。

为了说明这一点,请考虑在位置 P 处插入元素的问题。为此,您需要更改 P 及以后所有现有元素的位置。对于每一个,您需要从 HashMap 中删除该元素,然后重新插入它。假设随机选择 P,则重新编号为 O(N),其中 N 是“列表”长度。此外,重新编号必须以原子方式完成,因此它必须阻塞其他操作......相当长的时间。

关于java - 实现非阻塞线程安全列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30422864/

相关文章:

java - 我该如何冒泡排序?

java - 在 Java 中创建三个线程来计算三个不同的项目

java - 数组索引不递增(需要在方括号中进行转换)

Java:更容易 pretty-print ?

python - Pyhonic 使用 if 语句来处理应用于分块列表的不等式

c# - .NET 加密类的线程安全性?

python - 从多个词典提取到 csv

python - 将一个嵌套列表的元素与另一个嵌套列表进行比较

java - 我可以将 AspectJ 用于 "wrap"一个带有 ThreadLocal 的字段吗?

wcf - 创建单例 ChannelFactory<T> 并重用于客户端连接