问题标签 [concurrentskiplistmap]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
1997 浏览

java - 如何正确使用 concurrentskiplistmap?

尝试使用并发跳过列表映射。我在如何正确使用同步链接哈希映射方面遇到问题,所以我决定尝试并发跳过列表映射。

我有同样的问题。下面的单元测试失败,因为当我获取条目集时,当 size() 指示地图不为空时,它具有空值。naict,我可以访问同步的地图。

我认为不需要这样做(同步),因为这是一个并发地图。

服务器只是将数字 0,1,2,3, ... 放入地图中,使其大小保持在阈值以下。它尝试在服务器启动后的每一毫秒内输入一个数字。

任何指针将不胜感激。

谢谢

0 投票
3 回答
2445 浏览

java - java并发map按值排序

我正在寻找一种方法来拥有可以按值而不是键排序的并发映射或类似的键->值存储。

到目前为止,我正在查看ConcurrentSkipListMap但我找不到按值排序的方法(使用Comparator),因为compare方法只接收键作为参数。

该映射具有字符串形式的键和整数形式的值。我正在寻找的是一种检索具有最小值(整数)的键的方法。

我也在考虑使用 2 个映射,并使用整数键和字符串值创建一个单独的映射,这样我将有一个我想要的按整数排序的映射,但是可以有多个具有相同值的整数,这可能会导致我遇到更多问题。

例子

"user1"=>3 "user2"=>1 "user3"=>3

排序列表: "user2"=>1 "user1"=>3 "user3"=>3

有没有办法做到这一点,或者是否有任何第三方库可以做到这一点?

谢谢

0 投票
1 回答
964 浏览

java - 在 ConcurrentSkipListMap / ConcurrentSkipListSet 中重新排序键的原子方式?

这篇文章的摘要:我有一组订购的物品,它们的顺序可能会随着时间而改变。我需要能够从多个线程迭代这个集合,每个线程可能还想更新项目的顺序。

例如,多个线程需要以String任意排序顺序访问键。它们的字符串不是根据它们的自然顺序排序的,而是根据一些可能改变的值(因此,一个 custom Comparator)。我最初的实现是使用 aTreeSet并在其上同步。如果任何键需要重新排序,线程将从映射中删除键,更新比较值,然后重新插入键。为了实现这一点,键是原生String的,但比较器可以访问值。这是一种奇怪的安排,其中键的顺序可能会随着时间而改变,但是由于更改的键总是在更改时被删除并重新插入,因此它似乎可以工作。String(我想如果s 被包裹在另一个对象中,它也可以工作。)

我最近意识到ConcurrentSkipListSet/ConcurrentSkipListMap实现基本上是线程安全的排序集(分别是映射)。现在看来我可以遍历键而不必锁定整个数据结构。但是,有没有一种方法可以使用它们原子地删除一个键并将其替换为另一个键,就像我在上面所做的操作一样,以便其他迭代线程不会错过该项目,而不必使用synchronize块?

如果有人可以为这种类型的操作提出更好的数据结构,我也全神贯注!

0 投票
2 回答
264 浏览

java - Java - 在 ConcurrentSkipListMap 上同步线程是否可以接受?

我有一个程序,其中许多线程将他们的请求发布到PriorityQueue. 稍后,他们等待来自 的回应ConcurrentSkipListMap。有一个线程发布对ConcurrentSkipListMap​​.

以下代码行说明了这一点:

在程序初始化时

在调用者线程中

在响应处理程序线程中

问题

  • 在 上同步调用者线程和响应处理程序线程是否安全ConcurrentSkipListMap
  • 我应该使用 Lock 进行同步吗?
  • 我应该使用 a HashMapof locks ( HashMap<Long,Object>) 吗?

我对 java.util.concurrent API 很陌生,我有一些疑问......

0 投票
1 回答
767 浏览

java - 从 SortedMap 的头部删除多个项目的性能

我正在使用 Java 并有一个 SortedMap,它被实现为 ConcurrentSkipListMap。我需要从 SortedMap 的头部删除一些项目 - 即键小于某个阈值的所有项目。实际删除的项目数最终可能是 0、1 或多个。有可能,但不太可能,这会导致整个 SortedMap 中的所有项目都被删除(即,极有可能至少有一个项目大于阈值,尽管不能保证)。

在我看来,应该有一种方法可以相当有效地做到这一点,因为我们可以利用以下假设:1)要删除的项目是连续的,2)要删除的第一个项目是 SortedMap 的头部(并且每个#1,其余的紧随其后)。如果我建立自己的跳过列表,这很容易做到,但我很懒,不想重建内置 ConcurrentSkipListMap 中已经为我提供的所有逻辑,只是为了进行这一自定义操作。所以我的问题是,如何在使用 ConcurrentSkipListMap 时利用这些假设来提高性能?

我想出了以下方法,但不知道他们是否真的利用了我的假设:

方法1:迭代,删除项目,直到达到阈值。

方法二:重复删除第一项,直到第一项超过阈值。

方法3:获取从头部到阈值的一组条目,然后将它们全部删除。

方法 4:更优雅的 #3 版本。

0 投票
2 回答
164 浏览

java - Java ConcurrentSkipListMap ketset to array

I'm trying to use the following line to get an array of the keys from the ConcurrentSkipListMap :

But it didn't work, all the items in the result array are the same, why ?

0 投票
4 回答
626 浏览

java - 尝试创建地图时出现不兼容类型错误

我正在尝试使用ConcurrentSkipListMap. 如果我创建一个简单的地图示例,它似乎很好:

一旦我尝试创建地图地图,就会出现Incompatible types错误:

如果我将定义切换为包含 a ConcurrentSkipListMap,则其编译没有问题:

Map为什么我不能使用界面定义地图的地图?

0 投票
1 回答
1774 浏览

java - 如何按值对 ConcurrentSkipListMap 进行排序?

我正在尝试在 Java 中按值对 ConcurrentSkipListMap 进行排序,这是我的代码:

编译时收到错误消息:

线程“主”java.lang.ClassCastException 中的异常:java.lang.String 无法转换为 java.util.Map$Entry

正确的方法是什么?

感谢您的回答,但在它的 Java 文档中,它说“地图是根据其键的自然顺序排序的,或者是根据地图创建时提供的 Comparator 排序的”,那么如何为它提供一个按其排序的 Comparator价值观?

0 投票
1 回答
148 浏览

java - 使用 Java 集合的应用程序

有没有办法找到一些使用特定集合的 Java 应用程序。我实现了自己的并发跳过列表,并希望将其“替换”到一个应用程序中,在该应用程序中ConcurrentSkipListSet使用 Java 集合来查看我的实现和ConcurrentSkipListSet.

我知道我可以对两个跳过列表实现(我的和 Java 的)进行基准测试,但我想看看在真实场景中有什么区别。

关于如何找到这样的应用程序的任何想法?(*我在 Java 标准库中搜索,但使用 找不到任何东西ConcurrentSkipList)。

0 投票
0 回答
589 浏览

java - 如何根据值创建并发排序图?

我需要创建一个带有<String, AtomicLong>参数的并发映射。应该根据它的值对地图进行排序,当我增加 时AtomicLong,它也应该自我平衡。

问题ConcurrentSkipListMap在于它无法根据地图的值对地图进行排序。TreeMap 不是并发数据结构。

我正在寻找一种数据结构,以便插入的复杂性应该O(log(n))TreeMapand ConcurrentSkipListMap。此外,这些值不是唯一的,因此可能有多个映射条目具有相同的数值AtomicLong