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

2023-11-24

我正在阅读《Java Concurrency in Practice》这本书。第 85 页第 5.2.1 节讨论了 ConcurrentHashMap 及其优点。然而,书中的一部分声称

ConcurrentHashMap 返回的迭代器是弱一致的。这 意味着这个迭代器可以容忍并发修改, 遍历构造迭代器时存在的元素,并且 可能(但不保证)反映对集合的修改 构造迭代器之后。

从为什么我理解并发程序中同步的全部意义在于允许线程以一致的方式访问共享资源,而 ConcurrentHashMap 并没有真正实现这一点。那为什么还要使用它呢?


重点是avoid不需要时同步。如果您不介意在某些情况下看到新元素而在其他情况下看不到它们,请使用ConcurrentHashMap的迭代器可以比either防止其他线程在迭代时添加项目or创建迭代器时获取一致的快照。

所以,是的,当您需要同步和一致的迭代器时,您将需要一个替代方案 - 但当您不需要时,您可以利用提供的更高效的迭代器ConcurrentHashMap.

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

ConcurrentHashMap 返回一个弱一致性迭代器,我们为什么要使用它呢? 的相关文章

  • Java 中的 XPath 节点集

    我在 eclipse 中有这段代码 NodeSet nodes NodeSet xPath evaluate expression inputSource XPathConstants NODESET 它给我 NodeSet 上的编译时错误
  • 在Windows上安装Java 11 OpenJDK(系统路径问题)

    Java 11 最近发布了 众所周知 这个版本没有安装文件 当然 要在没有安装程序的情况下安装 Java 我将系统设置 PATH 和 JAVA HOME 设置为解压缩 Java 11 的文件夹的地址 根据对类似问题的已接受回复建议 唯一的事
  • Java8无符号算术

    据广泛报道 Java 8 具有对无符号整数的库支持 然而 似乎没有文章解释如何使用它以及有多少可能 有些函数 例如 Integer CompareUnsigned 很容易找到 并且似乎可以实现人们所期望的功能 但是 我什至无法编写一个简单的
  • 在数据流模板中调用 waitUntilFinish() 后可以运行代码吗?

    我有一个批处理 Apache Beam 作业 它从 GCS 获取文件作为输入 我的目标是根据执行后管道的状态将文件移动到两个 GCS 存储桶之一 如果管道执行成功 则将文件移动到存储桶 A 否则 如果管道在执行过程中出现任何未处理的异常 则
  • 如何为 Gson 编写自定义 JSON 反序列化器?

    我有一个 Java 类 用户 public class User int id String name Timestamp updateDate 我收到一个包含来自 Web 服务的用户对象的 JSON 列表 id 1 name Jonas
  • jdbc4.MySQLSyntaxErrorException:数据库中不存在表

    我正在使用 SpringBoot 开发一个网络应用程序 这是我的application properties文件来指定访问数据库的凭据 spring datasource driverClassName com mysql jdbc Dri
  • 如何在jsp代码中导入java库?

    我有以下jsp代码 我想添加 java io 等库 我怎样才能做到这一点
  • 迁移到 java 17 后有关“每个进程的内存映射”和 JVM 崩溃的 GC 警告

    我们正在将 java 8 应用程序迁移到 java 17 并将 GC 从G1GC to ZGC 我们的应用程序作为容器运行 这两个基础映像之间的唯一区别是 java 的版本 例如对于 java 17 版本 FROM ubuntu 20 04
  • Clip 在 Java 中播放 WAV 文件时出现严重延迟

    我编写了一段代码来读取 WAV 文件 大小约为 80 mb 并播放该文件 问题是声音播放效果很差 极度滞后 你能告诉我有什么问题吗 这是我的代码 我称之为doPlayJframe 构造函数内的函数 private void doPlay f
  • Java中接口作为方法参数

    前几天去面试 被问到了这样的问题 问 反转链表 给出以下代码 public class ReverseList interface NodeList int getItem NodeList nextNode void reverse No
  • 如何将文件透明地传输到浏览器?

    受控环境 IE8 IIS 7 ColdFusion 当从 IE 发出指向媒体文件 例如 mp3 mpeg 等 的 GET 请求时 浏览器将启动关联的应用程序 Window Media Player 我猜测 IIS 提供文件的方式允许应用程序
  • 从 android 简单上传到 S3

    我在网上搜索了从 android 上传简单文件到 s3 的方法 但找不到任何有效的方法 我认为这是因为缺乏具体步骤 1 https mobile awsblog com post Tx1V588RKX5XPQB TransferManage
  • Spring Data 与 Spring Data JPA 与 JdbcTemplate

    我有信心Spring Data and Spring Data JPA指的是相同的 但后来我在 youtube 上观看了一个关于他正在使用JdbcTemplate在那篇教程中 所以我在那里感到困惑 我想澄清一下两者之间有什么区别Spring
  • 反思 Groovy 脚本中声明的函数

    有没有一种方法可以获取 Groovy 脚本中声明的函数的反射数据 该脚本已通过GroovyShell目的 具体来说 我想枚举脚本中的函数并访问附加到它们的注释 Put this到 Groovy 脚本的最后一行 它将作为脚本的返回值 a la
  • 如何在 JFreeChart TimeSeries 图表上显示降雨指数和温度?

    目前 我的 TimeSeries 图表每 2 秒显示一个位置的温度 现在 如果我想每2秒显示一次降雨指数和温度 我该如何实现呢 这是我的代码 import testWeatherService TestWeatherTimeLapseSer
  • 使用 AWS Java SDK 为现有 S3 对象设置 Expires 标头

    我正在更新 Amazon S3 存储桶中的现有对象以设置一些元数据 我想设置 HTTPExpires每个对象的标头以更好地处理 HTTP 1 0 客户端 我们正在使用AWS Java SDK http aws amazon com sdkf
  • Java中未绑定通配符泛型的用途和要点是什么?

    我不明白未绑定通配符泛型有什么用 具有上限的绑定通配符泛型 stuff for Object item stuff System out println item Since PrintStream println 可以处理所有引用类型 通
  • 将 JTextArea 内容写入文件

    我在 Java Swing 中有一个 JTextArea 和一个 提交 按钮 需要将textarea的内容写入一个带有换行符的文件中 我得到的输出是这样的 它被写为文件中的一个字符串 try BufferedWriter fileOut n
  • 中断连接套接字

    我有一个 GUI 其中包含要连接的服务器列表 如果用户单击服务器 则会连接到该服务器 如果用户单击第二个服务器 它将断开第一个服务器的连接并连接到第二个服务器 每个新连接都在一个新线程中运行 以便程序可以执行其他任务 但是 如果用户在第一个
  • Jackson 将单个项目反序列化到列表中

    我正在尝试使用一项服务 该服务为我提供了一个带有数组字段的实体 id 23233 items name item 1 name item 2 但是 当数组包含单个项目时 将返回该项目本身 而不是包含一个元素的数组 id 43567 item

随机推荐

  • 如何使用 php 删除 json 响应中的反斜杠(“\”)?

    我尝试使用 php 将一行 mysql 查询添加到 JSON 中 我使用这段代码 public function lugaresCercanos lng lat distance result mysql query SELECT nomb
  • 在运行时根据语法构建解析器

    许多 大多数 C 正则表达式库允许在运行时从字符串创建表达式 有谁知道任何 C 解析器生成器允许在运行时将表示为字符串的语法 最好是 BNF 输入到生成器中 我发现的所有实现要么需要运行显式代码生成器 要么需要通过巧妙的模板元编程来表达语法
  • 64 位 Windows 中的汇编系统调用

    我使用的是 Windows 10 安装了 Cygwin 我一直使用 Cygwin 来使用 Cygwin 安装的 gcc 和 nasm 来编译 汇编 c 和汇编程序 据我所知 nasm有一个 f win64模式 因此它可以汇编64位程序 现在
  • 标识列与主键[关闭]

    很难说出这里问的是什么 这个问题模棱两可 含糊不清 不完整 过于宽泛或言辞激烈 无法以目前的形式合理回答 如需帮助澄清此问题以便重新打开 访问帮助中心 我们如何决定使用身份列还是主键 这两个概念并不相互排斥 所有组合都是可能的 身份列也是主
  • 为什么此查询在存储过程中返回不同的结果?

    Synopsis 我有一个查询WHERE包含一个条件的子句 该条件根据可能为 NULL 的参数检查可 NULL 列 如下所示 SELECT FROM Table WHERE NullableColumn NullableParameter
  • Python Tkinter 笔记本小部件

    Using 这个蟒蛇食谱 我在我的 Tk 窗口上创建了一个类似笔记本的小部件 一切正常 直到我尝试将图像添加到每个选项卡中 当我将图像添加到选项卡中时 我最初设置的文本不再显示 我想知道是否可以使文本 在本例中为 选项卡一 显示在图像正下方
  • Node.js 网络库:从“data”事件获取完整数据

    我四处寻找 要么找不到我想要回答的确切问题 要么我需要有人像我 5 岁一样向我解释 基本上 我有一个使用 Net 库的 Node js 脚本 我正在连接到多个主机 发送命令 并监听返回数据 var net require net var n
  • 使用 WKWebView 拉动刷新

    我正在尝试将刷新拉动添加到 WKWebView 在这段代码中 我应该在哪里添加一些东西来允许我触发拉动刷新 我还没有找到任何可行的方法将其添加到我的代码中 因此您不会在下面的代码中找到我尝试完成此操作的任何尝试 我找到的大多数答案都是 Ob
  • 添加高斯噪声

    我有一个 arff文件 其中包含浮点数列表 我需要向每个数字添加高斯噪声 在 MATLAB 中为 m m k randn size m where m是列表中的数字之一 并且k是一个标准差并且有值0 1 是什么C 相当于randn 您能举个
  • Hibernate Envers - 不为 createQuery(...).executeUpdate() 写入审核记录,仅为 .persist() 和 .merge() 写入审核记录

    我有 3 种方式将数据写入数据库 public void create T object entityManager persist object public void update T object object entityManag
  • 寻找一个 O(1) 索引和 O(log(n)) 插入和删除的数据容器

    我不确定这是否可能 但对我来说似乎有点合理 我正在寻找一种允许我执行这些操作的数据结构 插入一个项目的时间复杂度为 O log n 删除一个项目的时间复杂度为 O log n 查找 编辑 O 1 中的第 k 个最小元素 对于任意 k O 1
  • 条带连接错误

    我有以下后端 Node js 代码来连接到我的 Stripe 帐户以进行收费 但我收到这个错误 我正在使用 Firebase 函数 并且此功能以前可以工作 因此我怀疑这与 Firebase 访问限制有关 对此的任何想法和帮助将不胜感激 va
  • Firebase 云消息传递 HTTP V1 API:如何通过 REST 调用获取 Auth 2.0 访问令牌?

    为了使用HTTP V1 API 不是旧版 API 对于 PHP 必须使用 REST 接口 https firebase google com docs cloud messaging send message top of page 我想知
  • 跟踪大型 XML 文件的加载进度

    我尝试跟踪 dotnet C 框架 3 5 SP1 中大 XML 文件 我不是这些文件的提供者 的加载进度 通过网络文件共享从 1 MB 到 300 MB 我使用 XmlReader 进行加载 而不是直接使用 XmlDocument Loa
  • 错误:“致命:使用捆绑安装时我不处理协议“git”

    我的 GemFile 中有以下行 gem rails git gt git github com rails rails git 我收到以下错误 Fetching git github com rails rails git fatal I
  • Kubernetes Pod 中的 OpenVPN 客户端

    我正在研究如何使 OpenVPN 客户端在 Pod 的容器上工作 我解释了我所做的事情 但是您可以跳过我的所有解释并直接提供您的解决方案 如果可行的话 我不在乎将以下所有内容替换为您的步骤 我想让我的容器以外部和内部网络都可以工作的方式使用
  • 英特尔 64 和 IA-32 |原子操作包括获取/释放语义

    根据 Intel 64 和 IA 32 架构软件开发人员手册 LOCK 信号前缀 确保处理器在信号置位时独占使用任何共享内存 这可以是总线或高速缓存锁的形式 但是 这就是我问这个问题的原因 我不清楚这个前缀是否也提供任何内存障碍 我正在多处
  • Visual Studio 绿色下划线 _ (不是绿色波浪线)

    Visual Studio 2013 经常用绿色 绿色下划线 标记我的代码 它代表什么 是否有与之相关的功能 例如自动完成或智能感知 这是自动大括号完成功能Visual Studio 2013 中引入 尽管如此 就像 Visual Stud
  • 如何让 Django 从 unicode 字符创建 slug?

    Django Unicode Slug 如何实现 class NewsModel models Model title models CharField max length 300 slug models CharField max le
  • ConcurrentHashMap 返回一个弱一致性迭代器,我们为什么要使用它呢?

    我正在阅读 Java Concurrency in Practice 这本书 第 85 页第 5 2 1 节讨论了 ConcurrentHashMap 及其优点 然而 书中的一部分声称 ConcurrentHashMap 返回的迭代器是弱一