问题标签 [concurrenthashmap]
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.
java - 什么更便宜:使用单个 ConcurrentHashMap 的 n 个迭代器或 HashMap 的 n 个实例进行遍历
想象一个生产者-消费者场景,线程 A 产生条目,一对多的其他线程消耗它们。
为此,我将一堆条目传递给每个消费者线程。
这样做我问自己是否更便宜(主要是 CPU 使用,其次是内存):
- 为每个消费者线程提供一个单独的实例
HashMap
。将 传递Map
给一个消费者后,Map
将创建一个新实例并将其用于将下一个生成的条目传递给下一个线程
或者
- 使用单个并为每个消费者线程
ConcurrentHashMap
创建一个,并在将 传递给线程后清除- 以便每个 Iterator 包含其自己的底层视图。Iterator
Iterator
Map
Map
你怎么看?一个或多或少的通用答案可能吗?
或者它是否强烈依赖于一些变量,如条目数、线程等?
编辑:或者我应该使用其他可以更好地解决这些问题的数据结构吗?
java - 从高速数据流更新地图
我有一个多线程 Java 应用程序,其中方法 [update(key, value)]
更新ConcurrentHashMap
. 对于每个键,接收到的值将多于可以放入映射中的值,因此一旦更新了键,就应该使用等待的线程的最新值来再次更新映射。或者也许有某种锁可以在只有 1 个线程在等待的情况下使用 - 最后一个到达锁的线程(有效地处理已经等待的线程)?重要的是整个地图没有被锁定,这就是为什么我没有在法线周围使用同步块,HashMap
因为即使有线程在密钥 A 上等待,只要没有密钥 B,仍然应该允许更新密钥 B线程已经更新为 B 存储的值。
更简洁地说,如何使用最后接收到的值作为下一次更新来更新接收键值对的速度比更新速度更快的映射?因此,在 A 更新为 1 时,将收到 5、3、6、8 的值,这意味着 A 的下一次更新将是 8。
java - “CopyOnWriteArrayList”和“ConcurrentHashMap”可以序列化吗?
我有一个使用 RMI 的类传送。但我不确定那些线程安全的对象是否可以序列化。以前有人试过吗?
更新 skaffman 说是的,但是我序列化失败。
这是我传送的课程。
这是课WhatzNewEntry
可能 skaffman 是对的,但这里有什么问题?
java - Java 与 db 值同步
我得到了一个代码,它根据用户名和服务类型创建一个唯一的 ID。唯一 ID 在 db 中,通过我看不到的 DAO 类读取 db。创建 id 需要很多步骤。
在多线程环境中,无法保证唯一 ID。
保证唯一性
解决方案:我会将 id 缓存在 ConcurrentHashmap 中,其中 userId+service 作为键,id 作为值。每当调用该方法时,我将检查 value(id) 如果不存在密钥上的锁并创建 id。这将减少争用并保证唯一性。
想知道我的解决方案是否有任何问题和/或是否有更好的解决方案?
java - ConcurrentLRUCache/HashMap 是否曾经接触过磁盘?
在我预热缓存时有很多磁盘活动。我无法确定 org.apache.lucene ConcurrentLRUCache 是否正在执行此操作?(有问题的类使用 Java ConcurrentHashMap)。
蒂亚雷内
java - 关于java concurrenthashmap替换方法的问题
我有以下代码
两次输出都为空。不应该是1秒吗?
java - ConcurrentSkipListMap 有什么好处?
我的意思是,如果 Java 库中有 ConcurrentSkipListMap,它有时可能比 ConcurrentHashMap 更好。我想知道 ConcurrentSkipListMap 哪里真的好?
java - ConcurrentHashMap.putIfAbsent 的性能
Joshua Bloch在54:15关于 Effective Java的演讲中建议使用get
beforeputIfAbsent
以提高性能和并发性。这让我想到了为什么这种优化还没有内置的问题
java - 具有空键功能的线程安全映射
我需要一个多线程 Map 对象来在我的 Web 服务器的缓存中使用,并且我需要有null
键。
HashMap
允许我有空键,但ConcurrentHashMap
没有。我尝试创建HashMap
using的同步版本,Collections.synchronizedMap(new HashMap())
但它也不接受null
密钥。
有没有我可以使用的替代方法,而不必实施某种方式来包装null
密钥?
java - Guava 地图中驱逐的懒惰
当前的地图驱逐算法非常懒惰。看起来过期的对象只有在访问数据结构时才会被驱逐。
例如,从地址到索引器的映射定义为:
导致非常令人惊讶的模式:虽然containsKey()
对于给定的地址返回 false,但在该地址的索引器被驱逐后立即返回。
使清理过程更加实时的推荐方法是什么?即删除接近实际到期时间的对象。
更新:我想更清楚地说明我所说的实时是什么意思。对于上面的示例, EXPIRATION 为 10 秒,我希望看到插入的对象在最后一次访问后 10 秒内被驱逐。现在不会发生这种情况 - 必须以某种方式使用地图来开始驱逐。如果地图完全未使用,则该对象可以在那里停留数年。