ConcurrentHashMap 调整大小时读取

2024-01-12

我想知道当我们尝试在 ConcurrentHashMap 调整大小时读取它时可能发生的情况。

我知道在读取期间,第一次尝试总是不同步的。在第二次尝试中,它将尝试获取锁并重试。

但如果在调整大小期间发生这种情况,它将如何工作?

Thanks


通过查看源码:

ConcurrentHashMap 包含一个或多个段,具体取决于并发级别。

在重新哈希期间,一个段被锁定,新表在旧表旁边构建,然后在最后替换它。

如果你打电话get()在重新散列一个段并且您的密钥存储在该段中时,您将无锁地访问该段的旧表,如果找到并且该值不为空,则将返回该表。如果该值为 null,则调用将阻塞,直到重新哈希完成并且该值将在锁定下再次读取。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ConcurrentHashMap 调整大小时读取 的相关文章

  • ConcurrentHashMap解析

    https www cnblogs com ITtangtang p 3948786 html java util concurrent xff08 j u c xff09 源码阅读
  • ConcurrentHashMap在jdk1.7和jdk1.8中的不同;

    原博客 https www cnblogs com lujiango p 7580558 html http www importnew com 28263 html CouncurrentHashMap 线程安全 一 Councurren
  • Java知识点梳理:Collection框架

    java集合类是开发中经常用到的 比如ArrayList HashMap HashSet等 下面来系统的说一下 Collection类图 Collections与Collection Collection 是一个集合接口 提供了对集合对象进
  • Java并发包中那些值得学习的并发工具类(空谈误国,实干兴邦,代码示范,抛砖引玉)

    首先我们通常说的并发包就是java util concurrent包及其子包 集中了Java并发的各种基础工具类 一 这个并发包在哪 上面的包就是传说中的并发包 为什么这个并发包就比较流弊呢 原因主要有以下几点 提供了几个比synchron
  • HashMap/ConcurrentHashMap在单线程模式下的性能比较

    起源 阅读源码发现jdk8中ConcurrentHashMap是基于synchronized来加锁实现多线程安全的 但是实现方式上与早期的HashTable又有了很大的区别 虽然都是使用synchronized来加锁 但是锁的粒度不一样 大
  • ConcurrentHashMap源码解读

    曾经研究过jkd1 5新特性 其中ConcurrentHashMap就是其中之一 其特点 效率比Hashtable高 并发性比hashmap好 结合了两者的特点 集合是编程中最常用的数据结构 而谈到并发 几乎总是离不开集合这类高级数据结构的
  • ConcurrentHashMap的Segment和HashMap的Bucket理论上有什么区别?

    我知道在HashMap中 条目 Key Value 基于hash Key hashCode gt 表示存储桶位置的索引 如果条目已放置在该位置 则会创建一个链接列表和新条目 如果它有不同的键 gt 通过equals method 被放置在链
  • JDK8中ConcurrentHashmap代码解释

    我一直在尝试理解 JDK8 中的 ConcurrentHashMap 函数 与 JDK7 中的函数相反 除了源代码之外 还可以找到一些好人 例如 Richard 对其进行了很好的解释http www burnison ca articles
  • 统计catch块中发生的异常数量

    我正在尝试收集发生异常的所有计数以及异常的名称ConcurrentHashMap这样我就应该知道这个异常发生了多少次 因此 在我的 catch 块中 我有一个映射 它将继续添加异常的名称和出现的总计数 下面是我的代码which I have
  • 递归 ConcurrentHashMap.computeIfAbsent() 调用永远不会终止。错误还是“功能”?

    前一段时间 我在博客中介绍了一种递归计算斐波那契数的 Java 8 函数方法 有一个ConcurrentHashMap缓存和新的 有用的computeIfAbsent method import java util Map import j
  • 将对象重新放入 ConcurrentHashMap 是否会导致“发生在”内存关系?

    我正在与existing具有 ConcurrentHashMap 形式的对象存储的代码 映射内存储了可供多个线程使用的可变对象 根据设计 没有两个线程会尝试同时修改一个对象 我关心的是线程之间修改的可见性 目前 对象的代码在 setter
  • 固定大小的并发Map

    我需要一张满足以下要求的地图 应该是高并发的 这put get and remove 方法可以由多个线程同时调用 它应该是固定大小的 如果尺寸HashMap达到最大值 例如 10000 则不允许向映射添加新条目 它不能是 LRU 缓存 其中
  • 使用 ConcurrentHashMap 可以消除数据可见性问题吗?

    我已读完Java 并发实践 http www javaconcurrencyinpractice com 剩下的问题是 当我使用 ConcurrentHashMap 时 我还需要担心本书第一部分中讨论的哪些数据并发问题 以下是我的一个程序中
  • ConcurrentHashMap 有什么缺点吗?

    我需要一个可从多个线程访问的 HashMap 有两个简单的选项 使用普通的 HashMap 并在其上同步 或者使用 ConcurrentHashMap 由于 ConcurrentHashMap 不会阻止读取操作 因此它似乎更适合我的需求 几
  • 更新 ConcurrentHashMap 中其他键的后果#computeIfAbsent

    Javadoc 来自ConcurrentHashMap computeIfAbsent says 计算应该简短且简单 并且不得试图 更新此地图的任何其他映射 但是 据我所知 使用remove and clear 里面的方法mappingFu
  • ConcurrentHashmap 同时进行写入和获取操作

    我有一个关于 ConcurrentHashMap 的问题 假设我有 2 个线程 线程 A 尝试从共享 ConcurrentHashMap 中获取对象 线程B清除共享映射 如果线程 A 和线程 B 同时访问共享资源 会发生什么情况 我搜索了文
  • gcc std::unordered_map 实现速度慢吗?如果是这样 - 为什么?

    我们正在用 C 开发高性能关键软件 我们需要一个并发哈希映射并实现它 因此 我们编写了一个基准测试来弄清楚 我们的并发哈希映射与std unordered map But std unordered map似乎非常慢 所以这是我们的微基准测
  • Java 从 ConcurrentHashMap 中删除特定项

    使用remove 方法可以吗 我读过一篇文章 说remove方法中还没有添加同步功能 如何正确删除specificConcurrentHashMap 中的项目 示例代码 ConcurrentHashMap
  • 具有空键功能的线程安全映射

    我需要一个多线程 Map 对象在我的 Web 服务器的缓存中使用 并且我需要null keys HashMap允许我有空键 但是ConcurrentHashMap没有 我尝试创建一个同步版本HashMap using Collections
  • 独占锁定ConcurrentHashMap

    我知道不可能锁定 ConcurrentHashMap 进行独占访问 但是 我找不到原因 是因为构成CHM的 Segment 没有被api公开吗 据推测 如果是的话 客户端代码可以执行 交接 锁定 Cheers 我知道不可能锁定 Concur

随机推荐

  • CSS 变量名中允许使用句点吗?

    例如 我可以有一个名为如下的 css 变量 Button onHover 请注意 CSS 变量与 CSS 选择器不同 我必须解释这一点 因为有人将其标记为重复项 这是模块中的示例superfly css 变量 颜色 https github
  • 如何抛出不会终止我的程序的 IllegalArgumentException?

    好吧 我有一个带有 switch 语句的方法 但我省略了其余的情况 因为它们并不重要 在我的主要方法中 调用运算符方法并在 while 循环中传递参数 选择 直到他们选择 Q 当用户输入负数时 它应该抛出异常 打印一条消息 并忽略他们的输入
  • 在流畅的界面中实现条件

    我一直在尝试为我的系统中的一组规则实现一个流畅的界面 我想要完成的是这个 TicketRules RequireValidation When quartType gt quartType QuartType Before TotalMil
  • PHP奇怪的DOCUMENT_ROOT

    基本上 我正在编写一个框架 作为其功能的一部分 它应该为最终开发人员提供一组完善的 URI 路径 其中两条路径利用 SERVER DOCUMENT ROOT Absolute filesystem path to web root inst
  • 如何从 Jersey 的 ContainerRequest 中提取请求属性?

    HttpServletRequest有一个方法setAttribute String Object 我怎样才能从中提取这个属性ContainterRequest 我没有找到 getAttribute method Code public c
  • 创建 WooCommerce 自定义 API

    由于开箱即用的 WooCommerce REST API 中缺乏许多功能 我正在考虑创建一个 WooCommerce 端点 例如 付款 产品插件等 但我找不到任何可以开始的东西 也没有关于如何扩展 WooCommerce 以创建新端点的文档
  • 在调用 RunWorkerAsync 之后但在函数退出之前取消订阅 DoWork 是否安全?

    我有很多方法 虽然它们一次只运行一种 但它们都使用相同的RunWorkerCompleated and ProgressChanged方法 但它们都有不同的Dowork方法 执行以下操作是否安全 private void button Pr
  • 读取嵌入换行符的 CSV 文件

    我正在处理从网站上抓取的文件 该文件保存为带有引号字段的分号 csv 最后一个字段包含嵌入的换行符 我一直在编写一个脚本来处理该文件 我对 Perl 相当陌生 起初是用普通的 Perl 脚本尝试它 但很快发现它不起作用 我做了研究 发现我应
  • Android:以编程方式更改选项卡文本颜色

    我有一个像这样的 TabHost
  • 用keras网格搜索隐藏层数

    我正在尝试使用 Keras 和 sklearn 优化我的神经网络的超参数 我正在结束 KerasClassifier 这是一个分类问题 我正在尝试优化隐藏层的数量 我不知道如何使用 keras 做到这一点 实际上我想知道如何设置函数 cre
  • 升级到 VS2017 后 VSTS 托管构建失败

    我已将最初在 VS2015 中创建的 asp net core 项目 project json 升级为 VS2017 MSBuild 项目格式 csproj 构建定义如下所示 Restore Build and Test构建步骤最终会出现以
  • 在训练 CNN 进行文本分类时如何微调 word2vec?

    我有 3 个关于微调词向量的问题 请帮帮我 我会非常感激的 提前谢谢了 当我训练自己的 CNN 进行文本分类时 我使用 Word2vec 来初始化单词 然后我只是使用这些预先训练的向量作为我的输入特征来训练 CNN 所以如果我从来没有嵌入层
  • Castle Windsor:我的瞬态组件会被垃圾收集吗?

    使用温莎城堡 我有一个配置了瞬态生活方式的组件
  • 构建角度库时包含资产

    我正在构建一个包含自定义图标字体的库 但是 当我使用构建我的库时ng build
  • Require.js 优化器和路径中的变量

    我在让 r js 按我们需要的方式工作时遇到问题 我有以下问题 我们有 2 个域 例如 foo de 和 bar de 和不同的环境 根据它们运行的 环境和域 它们需要从源服务器加载不同的文件 我最初的解决方案是这样的 channelDom
  • 在图表或系列公式中使用间接函数?

    我试图引用图表中定义的命名范围 该部分工作正常 但是 我也尝试通过用户输入更改该范围 例如 在下拉菜单中我有 Apples Grapes橙子 用户可以选择其中一项 这三个都是命名范围 然后我有一张像这样的图表 该图表引用命名范围 如下所示
  • 使用 np.savetxt 将数组保存为列

    我正在尝试做一些可能非常简单的事情 当我尝试此操作时 我想使用 np savetxt 将三个数组作为列保存到文件中 x 1 2 3 4 y 5 6 7 8 z 9 10 11 12 np savetxt myfile txt x y z f
  • 如何在SqlDataSource中为存储过程指定参数值

    作为使用 SqlDataSource 声明性语法的新手 我试图找出一种将参数值设置为存储过程的方法 我有一个通过请求对象传递的 Client ID 我需要在执行 SqlDataSource 的存储过程之前设置 Client ID 我有一些问
  • lubridate - 计算每个间隔的重叠间隔

    我今天在编程方面经验不是很丰富 但在过去很远的地方做了一些工作 我们支持共享汽车 每辆车都有带有开始日期时间和结束日期时间的预订 每个预订的开始 dt 和结束 dt 均在 00 或 30 分钟处 并且持续时间 gt 30 分钟 现在我们在同
  • ConcurrentHashMap 调整大小时读取

    我想知道当我们尝试在 ConcurrentHashMap 调整大小时读取它时可能发生的情况 我知道在读取期间 第一次尝试总是不同步的 在第二次尝试中 它将尝试获取锁并重试 但如果在调整大小期间发生这种情况 它将如何工作 Thanks 通过查