concurrenthashmap 相关问题

Java ConcurrentHashMap数据结构。 ConcurrentHashmap是一个哈希表,支持检索的完全并发性和可更新的预期并发性。它允许从多个线程并发地修改Map,而无需阻止它们

清理过期的哈希映射

我需要一个在键值对过期后运行一段代码的数据结构。例如,我有一个密钥和一个连接对象存储在即将过期的哈希图中。我需要这个即将过期的 hashma...

回答 2 投票 0

Java ConcurrentHashMap的computeIfAbsent()方法支持基于key的“锁定”吗?

https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ConcurrentHashMap.html#computeIfAbsent-K-java.util.function.Function- 假设我们有 10 个线程使用 diff 调用以下代码...

回答 2 投票 0

为什么Java的Cleaner使用链表而不是ConcurrentHashSet?

Java 的 Cleaner 在底层使用双向链表来保存 PhantomReferences,直到它们的引用对象变得幻像可达。当 Cleaner 的守护线程弹出并删除 PhantomReferenc 时...

回答 1 投票 0

计算块内是否严格需要使用原子整数?

我的疑问很简单。根据其他帖子,由于读+写操作 count++,这不是线程安全的。但据我所知,计算会阻止该密钥的整个扇区......

回答 1 投票 0

如何锁定 ConcurrentHashMap 中的键

我正在将一个由线程创建的对象缓存到地图中。对象的创建是昂贵的,所以我不希望运行多个线程来创建对象,因为 put() 还没有 ret...

回答 2 投票 0

并行使用tbb::concurrent_hash_map的find()迭代时,获取到的数据量与map的大小不一致?

我有两个线程,一个在 tbb::concurrent_hash_map 上执行 find() ,另一个在不执行任何插入或删除的情况下遍历此映射。奇怪的是,如果find()没有执行...

回答 1 投票 0

groovy 关联数组线程安全吗?

我有一个groovy脚本,其中多个线程尝试写入声明为:def array = [:]的相同关联映射。 put 和 get 在这里的线程安全吗?我没有找到太多关于...的信息

回答 1 投票 0

从 ConcurrentHashMap 获取先前值和新值的功能方法

我需要从 Java ConcurrentHashMap (在 Scala 代码中)获取先前的值和新的值。为了保持线程安全,我使用只返回新值的计算块。是否可以同时获得新品和专品...

回答 1 投票 0

如何有条件地将值放入并发哈希图中?

我维护着不同游戏的高分地图。当我收到新的分数时,我希望能够检查该分数是否高于当前的高分,如果是,则将其设为新的高分...

回答 1 投票 0

为什么ConcurrentHashMap要防止空键和空值?

ConcurrentHashMap 的 JavaDoc 是这样说的: 与 Hashtable 类似,但与 HashMap 不同,此类不允许使用 null 作为键或值。 我的问题:为什么? 第二个问题:为什么没有 Hashtable

回答 8 投票 0

ConcurrentHashMap - 我们可以从 Transfer() 中删除 i >= n 吗?

相关: ConcurrentHashMap的传递方法中,我不明白这两个条件“i >= n”和“i + n >= nextn”的含义 我正在调查...

回答 1 投票 0

在map.computeIfAbsent中运行阻塞代码会抛出错误

我必须在 lambda 函数中执行一些阻塞代码,该函数被传递给并发 hashmap 的 map.computeIfAbsent() 方法。 但是这会引发错误 - block()/blockFirst()/blockL...

回答 0 投票 0

奇怪的 ConcurrentHashMap 行为

我们有一个高吞吐量的应用程序,它将缓存值存储在 ConcurrentHashMap 中,并定期更新和读取。可能每秒更新 100 次。 举个例子...

回答 1 投票 0

Spring boot 缓存在@PostConstruct 中不起作用

我正在构建一个“类缓存”,其中包含我稍后要调用的类。 主要目标是我不想在每次需要类实例时都扫描上下文。 # 模型/存储库类...

回答 1 投票 0

为什么 JDK11 的 ConcurrentHashMap 不需要 tabAt 和 setTabAt 方法中的 volatile 语义?

在JDK8的ConcurrentHashMap中,tabAt和setTabAt这两个方法都需要volatile语义。 static final Node tabAt(Node[] tab, int i) { 返回(节点 在JDK8的ConcurrentHashMap中,tabAt和setTabAt这两个方法都需要volatile语义。 static final <K,V> Node<K,V> tabAt(Node<K,V>[] tab, int i) { return (Node<K,V>)U.getObjectVolatile(tab, ((long)i << ASHIFT) + ABASE); } static final <K,V> void setTabAt(Node<K,V>[] tab, int i, Node<K,V> v) { U.putObjectVolatile(tab, ((long)i << ASHIFT) + ABASE, v); } 作者评论说: Note that calls to setTabAt always occur within locked regions, and so in principle require only release ordering, not full volatile semantics, but are currently coded as volatile writes to be conservative. 那么在JDK11的ConcurrentHashMap中,tabAt和setTabAt这两个方法都不需要volatile语义,而是使用acquire和release语义。 static final <K,V> Node<K,V> tabAt(Node<K,V>[] tab, int i) { return (Node<K,V>)U.getObjectAcquire(tab, ((long)i << ASHIFT) + ABASE); } static final <K,V> void setTabAt(Node<K,V>[] tab, int i, Node<K,V> v) { U.putObjectRelease(tab, ((long)i << ASHIFT) + ABASE, v); } 作者评论说: Note that calls to setTabAt always occur within locked regions, and so require only release ordering. 据我所知,数组Node<K,V>[] tab的元素不是volatile。仅使用获取和释放语义不能保证可见性。获取元素的线程不能立即看到设置元素的线程所做的更新。 即使对setTabAt 的调用总是发生在锁定区域内,似乎也没有任何区别。因为对 tabAt 的调用并不总是发生在锁定区域内,所以没有 happends-before 关系。 对tabAt的调用不在方法的锁定区域内发生get public V get(Object key) { Node<K,V>[] tab; Node<K,V> e, p; int n, eh; K ek; int h = spread(key.hashCode()); if ((tab = table) != null && (n = tab.length) > 0 && (e = tabAt(tab, (n - 1) & h)) != null) { if ((eh = e.hash) == h) { if ((ek = e.key) == key || (ek != null && key.equals(ek))) return e.val; } else if (eh < 0) return (p = e.find(h, key)) != null ? p.val : null; while ((e = e.next) != null) { if (e.hash == h && ((ek = e.key) == key || (ek != null && key.equals(ek)))) return e.val; } } return null; } 不知道是不是我的理解有问题。谁能提供更多相关信息? 任何帮助将不胜感激。

回答 0 投票 0

使用 pthread 的并发哈希映射的 C++ 实现

get方法中对pthread_mutex_lock的调用永远阻塞(在使用map的场景下,构造函数和然后对put的几次调用正确执行)。可能是什么原因...

回答 0 投票 0

ComputeIfAbsent 错误的地图大小

我已经尝试了下面的代码,以便为每个 jj 提供一个唯一的 id。 据我所知,computeIfAbsent 是线程安全的,但是: public static void main(String[] args) 抛出 InterruptedException { ...

回答 2 投票 0

Java 的哈希映射不允许自定义 equals/hashCode 有充分的理由吗?

ConcurrentHashMap 和 HashMap 正在使用键实例的 equals()/hashCode()。 几十年来,在很多情况下,我都错过了提供不同 equals/hashCode 的可能性

回答 1 投票 0

从直方图计算平均值和百分比?

我写了一个计时器,它可以测量任何多线程应用程序中某一代码的性能。在下面的定时器中,它还会在地图上填充多少次调用花了x ......

回答 2 投票 12

Java并发HashMap迭代

我正在使用一个线程(我们称它为 "MapChecker"),它的整个生命周期都在循环于一个ConcurrentHashMap。地图是由其他线程填充的,MapChecker通过使用......来清除它。

回答 2 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.