171得票5回答
ConcurrentHashMap的值迭代是否线程安全?

在Java文档中,ConcurrentHashMap的说明如下: 检索(包括get)通常不会被阻塞,因此可能与更新操作(包括put和remove)重叠。检索反映最近完成的更新操作的结果,在其开始时保持一致性。对于像putAll和clear这样的聚合操作,同时进行的检索可能只反映了某些条目的插...

164得票7回答
为什么ConcurrentHashMap不允许null键和值?

ConcurrentHashMap的JavaDoc中写道: 像Hashtable但不像HashMap,这个类不允许使用null作为键或值。 我的问题是:为什么? 第二个问题:为什么Hashtable不允许null? 我已经用了很多HashMap来存储数据。但是当我改变到Concur...

102得票3回答
gcc std::unordered_map 实现慢吗?如果是,为什么?

我们正在开发一款高性能关键软件,使用 C++ 编写。我们需要一个并发哈希映射表并实现了一个。因此,我们编写了一个基准测试来确定我们的并发哈希映射表与 std::unordered_map 相比慢了多少。 但是,std::unordered_map 似乎非常慢... 这是我们的微基准测试(对于...

93得票6回答
何时应该使用ConcurrentSkipListMap?

在Java中,ConcurrentHashMap用于实现更好的多线程解决方案。那么我什么时候应该使用ConcurrentSkipListMap呢?这是一种多余的做法吗? 这两种数据结构的多线程方面是否相同?

79得票3回答
递归使用ConcurrentHashMap.computeIfAbsent()从未终止。这是一个错误还是“特性”?

前段时间,我曾经在博客中介绍了一种使用Java 8函数式的递归计算斐波那契数列的方法, 使用了ConcurrentHashMap缓存和新的、有用的computeIfAbsent()方法: import java.util.Map; import java.util.concurrent.Co...

76得票6回答
在使用ConcurrentMap的putIfAbsent之前,是否应该检查map中是否包含键?

我一直在使用Java的ConcurrentMap作为多线程下可用的映射表,其中putIfAbsent方法非常好用,比起标准的映射表操作更加易读易写。我的代码看起来像这样:ConcurrentMap<String, Set<X>> map = new Concurrent...

63得票6回答
Java中的ConcurrentHashMap是什么?

ConcurrentHashMap在Java中有什么用途?它有哪些好处?它是如何工作的?提供示例代码会很有帮助。

48得票3回答
理解ConcurrentHashMap compute方法的代码

刚在ConcurrentHashMap的compute方法中发现了这段奇怪的代码:(第1847行)public V compute(K key, BiFunction<? super K, ? super V, ? extends V> remap...

47得票2回答
ConcurrentHashMap需要被包装在同步块中吗?

在ConcurrentHashMap上执行所有非检索操作(如put()、remove()等)是否需要用synchronized(this)块进行包装?我知道所有这些操作都是线程安全的,因此这样做是否有任何实际的好处/必要性?使用的唯一操作是put()和remove()。protected fi...

45得票2回答
为什么Java没有提供CopyOnWriteMap?

JDK内置了CopyOnWrite*实现,用于实现Set和List,但没有为Map提供,我经常对此感到遗憾。我知道还有其他的集合实现具有这些功能,但如果标准库中也提供这一功能就太好了。这似乎是一个明显的缺失,我想知道是否有充分的理由。有人知道为什么会被忽略吗?