Tag: concurrenthashmap

ConcurrentHashMap JDK 8何时使用computeIfPresent

jdk 8的新版Concurrent Hash Map有两个新方法。 computeIfAbsent computeIfPresent putIfAbsent – 旧方法 我理解putIfAbsent和computeIfAbsent的用例。 但我不确定何时使用computeIfPresent 。 另外,如果我现在有computeIfPresent,为什么还需要putIfAbsent。 putIfAbsent会创建至少一个额外的值实例。 原因只是具有向后兼容性吗?

如何使用LinkedHashMap中的类似function实现ConcurrentHashMap?

我使用了LinkedHashMap和accessOrder true,并且随时允许最多500个条目作为数据的LRU缓存。 但由于可伸缩性问题,我想转向一些线程安全的替代方案。 ConcurrentHashMap在这方面似乎很好,但缺少LinkedHashMap找到的accessOrder和removeEldestEntry(Map.Entry e)的function。 任何人都可以指向某些链接或帮助我简化实施。

在Java ConcurrentHashMap中打印所有键/值对

我试图简单地在ConcurrentHashMap中打印所有键/值对。 我在网上找到了这个代码,我认为会这样做,但它似乎是获取有关桶/哈希码的信息。 其实说实话输出很奇怪,可能我的程序不正确,但我首先要确保这部分是我想要使用的。 for (Entry entry : wordCountMap.entrySet()) { String key = entry.getKey().toString(); Integer value = entry.getValue(); System.out.println(“key, ” + key + ” value ” + value); } 这为大约10个不同的键提供输出,其计数似乎是映射到插入的总插入数的总和。

使用java ConcurrentHashMap实现缓存

我想在Web java应用程序中实现对重量级对象的简单缓存。 但我无法弄清楚如何正确地做到这一点。 我错过了什么或ConcurrentHashMap方法(putIfAbsent,…)是不够的,需要额外的同步? 是否有更好的简单API(在内存中,没有外部配置)来做到这一点? P.

计算catch块中发生的exception数量

我试图收集所有exception发生的计数和ConcurrentHashMap的exception名称,以便我应该知道这个exception发生了多少次。 因此,在我的catch块中,我有一个映射,它将继续添加exception名称并且总计数发生。 下面是我which I have modified to always throw SQL Exception代码which I have modified to always throw SQL Exception每次都为测试目的which I have modified to always throw SQL Exception ,这样我才能看到exception的数量是否准确。 所以某些情况 – 1)如果我选择线程数为10 ,任务数为50 ,那么在该映射中,我可以看到该特定字符串的500个exception 2)但是如果我选择线程数为40 ,任务数量为500那么我在该地图19000不到20000exception,它显示在19000左右。 我的问题是为什么? 我在这做什么错? class Task implements Runnable { public static final AtomicInteger counter_exception = new AtomicInteger(0); public static ConcurrentHashMap exceptionMap = […]

为什么无法锁定ConcurrentHashMap进行独占访问?

来自#JCIP的引用: “由于ConcurrentHashMap无法被锁定以进行独占访问,因此我们无法使用客户端锁定来创建新的primefaces操作,例如put-if-absent,就像我们为Vector所做的那样” 为什么我们不能只是获取锁以实现其他primefaces方法并保持集合线程安全 (如Collections.synchronizedxxx工厂返回的同步集合):

并发hashmap不需要同步的getter / setter吗?

如果我使用并发hashmap并且我有设置和获取值的方法,因为我使用并发hashmap我需要使getter和setter同步吗? 这是多余的吗? 一种设计更好吗? 另外,没有同步的并发hashmap比具有synchronized getter和setter的hashmap更快吗? 这是一个高性能系统 谢谢

ConcurrentHashMap返回一个弱一致的迭代器,为什么我们应该使用它呢?

我正在阅读Java Concurrecny这本书。 在第85页的第5.2.1节中,它讨论了ConcurrentHashMap及其优点。 然而,在一部分中,书籍声称 ConcurrentHashMap返回的迭代器非常一致。 这意味着这个迭代器可以容忍并发修改,遍历构造迭代器时存在的元素,并且可以(但不保证)反映迭代器构造后对集合的修改。 从我理解为什么并发程序中的整个同步点是允许线程以一致的方式访问共享资源,而ConcurrentHashMap并没有真正实现这一点。 那么为什么要使用呢?

ConcurrentHashMap中的分段

我是Java世界的新手,我正在探索ConcurrentHashMap API,我在其中发现了这个: static final int DEFAULT_INITIAL_CAPACITY = 16; static final float DEFAULT_LOAD_FACTOR = 0.75F; static final int DEFAULT_CONCURRENCY_LEVEL = 16; static final int MAXIMUM_CAPACITY = 1073741824; static final int MAX_SEGMENTS = 65536; static final int RETRIES_BEFORE_LOCK = 2; final Segment[] segments; final Segment segmentFor(int paramInt) { return this.segments[(paramInt >>> this.segmentShift & this.segmentMask)]; } ConcurrentHashMap中分段的基本原理是什么以及使用它的原因是什么? 请详细说明细分概念。

ConcurrentHashMap中的读操作关于返回值是否可靠?

我在一本书中读到,在ConcurrentHashmap中读取并不保证最近更新的状态,它有时会给出更接近的值。 它是否正确? 我已经阅读了它的javadocs和许多博客,似乎在另外说(即它是准确的)。 哪一个是真的?