concurrenthashmap相关内容
我知道不可能锁定一个ConcurrentHashMap进行独占访问。 然而,我找不到为什么。 这是因为“段”的构成CHM不是由api暴露? 假定如果是,客户端代码可以执行“手动”锁定? 干杯 解决方案 我知道不可能锁定一个ConcurrentHashMap进行独占访问。但是,我找不到原因。 简单 - 因为它不是真的。每个线程的单实例如何?如何同步方法或同步块?信号
..
我正在寻找对Brian Goetz的并发书中的以下代码的解释。 public V compute(final A arg) throws InterruptedException { while(true){ Future f = cache.get(arg); if(f == null){ Callable eval = new Callable(){
..
我必须在哈希图中存储单词及其相应的整数索引。散列图将同时更新。 例如:假设 wordList 是 {a,b,c,a ,d,e,a,d,e,b} 哈希映射将包含以下键值对 a:1 b:2 c:3 d:4 e:5 pre> 此代码如下: public class字典{ private ConcurrentMap
..
我一直在试图理解JDK8中的ConcurrentHashMap函数,与之相反的是JDK7(除了源代码,可以找到很好的解释很好的一些很好的人,如理查德 http://www.burnison.ca/articles/the-concurrency-of-concurrenthashmap )。它看起来像在JDK8中有相当多的改变 - 例如。没有更多的'段'本身,但不知何故我有一种感觉,这些更改意味着
..
我想要处理一系列客户请求。每个请求都有其特殊类型。首先,我需要初始化该类型的一些数据,之后,我可以开始处理请求。当客户端类型第一次来时,我只是初始化相应的数据。之后,使用该数据处理该类型的所有以下请求。 我需要以线程安全的方式这样做。 这是我写的代码。它是线程安全的吗? public class Test { private static Map
..
我在多线程应用程序中常用的数据结构是ConcurrentHashMap,其中我要保存一组共享同一个键的项目。 我一直在使用的模式是: final ConcurrentMap> hashMap = new ConcurrentHashMap>(); // ... 设置
..
是 final Map status = new ConcurrentHashMap>(); Map> statusInner = new ConcurrentHashMap
..
您好,我知道 ConcurrentHashMap before jdk 8 之前的工作方式。 我也理解代码,它是相当模块化,不是很难理解。 ConcurrentHashMap jdk 8的代码已经从以前的实现中改变了很多。 由于问题分类过宽,我会尝试非常具体。 CHMv8使用TreeBin 因此我的问题是什么是使用TreeBin在LinkedList的主要优点。 http:/
..
我正在使用具有ConcurrentHashMap形式的对象存储的现有代码。在地图中存储可变对象,由多个线程使用。没有两个线程试图通过设计一次修改对象。我关心的是线程之间的修改的可见性。 目前对象的代码在“setters”(由对象本身保护)同步。 “getter”没有同步,成员也不挥发。这对我来说意味着不能保证可见性。然而,当对象被修改时,它被重新回到映射中( put()方法被再次调用,同一个
..
我有一个usecase,我必须 如果ConcurrentHashMap中不存在该键,则插入一个新值 如果 中的键已经存在,则使用新值替换旧值ConcurrentHashMap,其中新值从旧值派生(不是昂贵的操作) 我有以下代码: public void insertOrReplace(String key,String value){ boolean updated =
..
我想在web java应用程序中实现对重量级对象的简单缓存。但我无法弄清楚如何正确地做。 我缺少一些东西或ConcurrentHashMap方法(putIfAbsent,...)是不够的,需要额外的同步? 有没有更好的简单API(在内存存储,没有外部配置)? P。 解决方案 如果可以安全地暂时拥有多个要缓存的内容的实例,如下所示执行“无锁”高速缓存: public
..
我正在读“Java Concurrecny”这本书。在第85页第5.2.1节中,它讨论了ConcurrentHashMap及其优点。然而,在一部分中,书籍声称ConcurrentHashMap返回的迭代器的弱一致性 。这个 意味着这个迭代器可以容忍并发修改, 遍历元素,因为它们在构造迭代器时存在,并且 可以(但不能保证)反映对集合 的修改构造迭代器。 为什么我理解并发程序中的整
..
如何在Java中使用弱键和身份哈希获取 ConcurrentHashMap ?我认为谷歌收藏可以给这样的事情,但我可以从标准库中得到它吗? 解决方案 我认为Google Guava Collections可以提供这样的功能,但是我可以从标准库中获得它吗? 简单的答案是否定的。Java SE没有实现这个特定的组合。 您可以实例化一个 java.util.concurrent.
..
任何并发专家可以在ConcurrentHashMap中解释,哪些并发功能比以前的JDK更好。 解决方案 code> ConcurrentHashMap 已被完全重写。在Java 8之前,每个 ConcurrentHashMap 有一个“并发级别”,在构建时已经固定。出于兼容性原因,仍然存在构造函数接受这样的级别,虽然不是以原来的方式使用它。地图被分割成许多段,因为它的并发级别,每个都有自己的
..
我有一个ConcurrentHashMap,其中我执行以下操作: sequences = new ConcurrentHashMap
..
根据Java Concurrency in Practice,第11.4.3章说: 锁分裂有时可以扩展到分区 锁定一组变量的独立对象,在这种情况下 它被称为锁定条带化。例如, 的实现ConcurrentHashMap使用16个锁的数组,每个锁保护散列桶的1/16 ; bucket N被N mod 16保护。 我仍然有问题来理解和可视化锁条带和桶机制。 有人可以用很好的理解词解
..
我想从网路应用程式的各个地方收集一些指标。为了保持简单,所有这些都将是计数器,因此唯一的修改操作是将它们递增1. 增量将是并发的和经常的。读取(转储统计信息)是一个罕见的操作。 我想使用ConcurrentHashMap。问题是如何正确增量计数器。由于地图没有“增量”操作,我需要先读取当前值,增加它,而不是在地图中放置新值。没有更多的代码,这不是一个原子操作。 是否可以实现这个没
..
我一直使用Java的ConcurrentMap作为可以从多个线程使用的映射。 putIfAbsent是一个伟大的方法,比使用标准地图操作更容易读/写。我有一些代码看起来像这样: ConcurrentMap map = new ConcurrentHashMap>(); // ... map.putIfAbsen
..
假设我有一个高读,低写的并且需要存储应用程序数据的并发映射: ConcurrentMap map = new ConcurrentHashMap();然后,在启动过程中和通过用户输入,数据被添加到地图: b $ b public void createData(Data newData){ map.put(newId,ne
..
我们遇到了一个奇怪的问题, ConcurrentHashMap ,其中两个线程似乎正在调用 put()然后在方法 Unsafe.park()中永久等待。从外部,它看起来像 ConcurrentHashMap 中的死锁。 我们只看到这种情况发生了一次。 任何人都可以想到可能导致这些症状的任何事情。 EDIT 相关线程的线程转储在这里: “[redacted] Threa
..