线程安全哈希映射?

2023-12-25

我正在编写一个应用程序,它将返回一个 HashMap 给用户。用户将获得此地图的参考。 在后端,我将运行一些线程来更新地图。

到目前为止我做了什么?


我已经创建了所有后端线程,因此共享一个公共通道来更新 MAP。因此,在后端,我确信并发写入操作不会成为问题。


我遇到的问题


  1. 如果用户尝试更新 MAP,并且同时 MAP 正在后端更新 --> 并发写入操作问题。
  2. 如果用户尝试从 MAP 读取某些内容,并且同时 MAP 正在后端更新 --> 并发读取和写入操作问题。

到目前为止我还没有遇到过这样的问题,但我担心将来可能会遇到。请给建议。

我在用ConcurrentHashMap<String, String>.


你在正确的轨道上使用ConcurrentHashMap http://docs.oracle.com/javase/1.5.0/docs/api/java/util/concurrent/ConcurrentHashMap.html。对于每个点:

  1. 查看方法putIfAbsent http://docs.oracle.com/javase/1.5.0/docs/api/java/util/concurrent/ConcurrentHashMap.html#putIfAbsent(K%2C%20V) and replace http://docs.oracle.com/javase/1.5.0/docs/api/java/util/concurrent/ConcurrentHashMap.html#replace(K%2C%20V)两者都是线程安全的,并且结合了检查哈希图的当前状态并将其更新为一个原子操作。
  2. The get http://docs.oracle.com/javase/1.5.0/docs/api/java/util/concurrent/ConcurrentHashMap.html#get(java.lang.Object)方法内部不同步,但会返回可用的指定键的最新值(检查ConcurrentHashMap 类 Javadoc 供讨论 http://docs.oracle.com/javase/1.5.0/docs/api/java/util/concurrent/ConcurrentHashMap.html).

的好处是ConcurrentHashMap在类似的事情上Collections.synchronizedMap http://docs.oracle.com/javase/1.4.2/docs/api/java/util/Collections.html#synchronizedMap(java.util.Map)组合方法是这样的putIfAbsent提供传统地图get and put逻辑以内部同步的方式。使用这些方法和do not尝试提供您自己的自定义同步ConcurrentHashMap因为它不会起作用。这java.util.concurrent集合是内部同步的,其他线程不会响应同步对象的尝试(例如synchronize(myConcurrentHashMap){}不会阻塞其他线程)。

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

线程安全哈希映射? 的相关文章

  • 编译错误:Android Studio

    我正在尝试修改基于 IntelliJ 构建的现有 Android 项目 我已经搜索并尝试了很多东西 但我的错误仍然没有消失 Error 5 1 android apt compiler main D android tinynote app
  • 模拟框架对我有什么作用?

    我听说有些我无法交谈的人是 jmock 的忠实粉丝 我已经做了以测试为中心的开发多年 所以我浏览了网站并查看了一些文档 但仍然不知道它有什么好处 我对春天也有同样的问题 如果您已经了解它是什么 他们的文档会很好地解释它 所以我并不认为 jm
  • JLabel.setText() 中的换行符

    使用 JLabel setText 时如何插入换行符 我尝试使用 Html 但似乎可以使其适用于 setText 仅适用于 jLabel 的初始声明 最初声明 jlabel 时的方法是 label new JLabel Hello Worl
  • 如何使用 log4j 自动记录类中调用的每个方法

    我有一个包含数据库调用的类 我通常希望使用 log4j 记录该类中调用的每个方法 带参数 logger debug foo id id initiated 可以自动执行此操作吗 也许通过在每个方法的开头使用某种注释而不是编写每个 logge
  • java中如何围绕另一个移动对象旋转一个对象?

    我对 Java 很陌生 想要编写一个简单的太阳系统 其中月球绕地球旋转 地球绕太阳旋转 一切正常 除了月亮不想正确移动 由于地球偏离月球的初始位置 月球的自转半径会根据该距离而增大 同样 当地球接近月球惯性位置时 自转半径会减小 如果初始位
  • 使用 ScheduledExecutorService 安排每月任务

    我想在该月的某一天的特定时间安排一项任务 每次运行之间的间隔可以设置在 1 到 12 个月之间 在java中 可以使用ScheduledExecutorService以固定的时间间隔调度任务 既然一个月的天数不固定 那么如何实现呢 提前致谢
  • JTable AutoCreateRowSorter 将数字排序为字符串

    我有一个 JTable JTable table new JTable String colNames c1 DefaultTableModel model new DefaultTableModel Integer x new Integ
  • C# 中的 Culture 相当于 Java 中的 Locale 吗?

    C 使用文化的概念 这在操作上与 Java 中的 Locale 类似吗 或者底层概念是否存在显着差异 从文化而不是语言环境的角度进行工作是一种寻找正确抽象层次的尝试 从以类似方式做事的人群的角度来考虑事物 而不是谈论地理区域和语言 并有点疯
  • 如何在Spring Security SAML示例中配置IDP元数据和SP元数据?

    我想处理 Spring Security SAML 为此 我开始探索Spring安全SAML http docs spring io spring security saml docs 1 0 x reference html chapte
  • Java 创建 Thread 实例时会发生什么

    我有一个关于 Java 线程和操作系统线程的问题 我读了Java 线程与 Pthreads https stackoverflow com questions 5269535 java threads vs pthreads and Jav
  • 如何在 Android 中将 EditText 绘制到画布上?

    我想画画 EditText username new EditText context 到我画布上的特定位置 protected void onDraw Canvas canvas 是否可以在基础上画出x y在我的 Java 文件中协调而不
  • Spring Batch:比较数据库之间的数据

    我有两个数据库 Oracle 和 MySQL 目标是将Oracle表中的值保存到MySQL中 要求 MySQL表中不存在数据 但我在理解 Spring Batch 时遇到了困难 步骤中 它包含itemReader itemProcessor
  • WSDL 表示中的枚举类型

    WSDL 表示如下
  • 在 Android 中使用 lambdaj

    有人尝试过在android开发中使用lambdaj库吗 当我创建一个简单的小型java应用程序时 它对我来说工作得很好 但我无法在android应用程序中使用它 UPDATE 我正在添加 lambdaj lambdaj 2 3 2 with
  • 小米和oppo等中国ROM上的工作管理器,在电池优化时,将工作的计划延迟增加几个小时

    小米和 Oppo 等中国 ROM 上的工作管理器在进行电池优化时 会将计划的工作延迟增加几个小时 但是 我注意到一些应用程序即使在电池优化下也能够让计划的作业安静地完美运行 我注意到的一个区别是 它们每次运行作业时都会显示一条通知 那么这是
  • 没有真正理解 std::atomic::compare_exchange_weak 和compare_exchange_strong 的逻辑

    我读了https en cppreference com w cpp atomic atomic compare exchange https en cppreference com w cpp atomic atomic compare
  • 如何迭代SparseArray?

    有没有办法迭代 Java SparseArray 适用于 Android 我用了sparsearray通过索引轻松获取值 我找不到 看来我找到了解决方案 我没有正确注意到keyAt index 功能 所以我会这样做 for int i 0
  • 对于每个抛出异常的语句,try/catch 是否被视为反模式?

    我目前正在审查同事的 Java 代码 我看到很多情况下 每个可能抛出异常的语句都被封装在自己的 try catch 中 其中 catch 块都执行相同的操作 哪个操作与我的问题无关 对我来说 这似乎是一种代码味道 我记得读到过它是一种常见的
  • 在调试模式下,哪些代码更改会自动反映在 Eclipse 中?

    我使用 eclipse 用于编写 调试 作为 IDE 在调试模式下 当我进行一些更改 例如初始化局部变量 时 它们会自动反映 但其他更改例如更改静态变量的值 有时我会收到一条消息 说我需要重新启动虚拟机 有时则不需要 现在的问题是哪些类型的
  • 跳过一行GridBagLayout

    我在 JFrame 上使用 GridBagLayout 我希望能够跳过一两行 但将这些行显示为空白 然后在这些行后面有一个按钮 我在文档中找不到任何方法来执行我所描述的操作 有谁知道我可以执行此操作的任何方法吗 发现它比添加空组件干净得多

随机推荐

  • 将 HTML 转换为 contentEditable 中的纯文本

    我有一个contentEditable我删除粘贴内容的格式on paste 通过捕捉事件 然后我聚焦一个文本区域 将内容粘贴到其中 然后复制该值 答案几乎来自here https stackoverflow com a 10551358 1
  • 直接在 Azure Datalake 中将 Python Dataframe 写入 CSV 文件

    我已将 Excel 文件导入到 pandas 数据框中 并完成了数据探索和清理过程 我现在想要将清理后的数据帧写入 csv 文件回 Azure DataLake 而不先将其保存为本地文件 我正在使用熊猫3 我的代码如下所示 token li
  • 任意精度小数算术中的浮点数与有理数 (C/C++)

    由于实现 AP 分数的方法有两种 一种是模拟 AP 的存储和行为double数据类型 仅具有更多字节 另一种是使用现有的整数 APA 实现将小数表示为有理数 即表示为一对整数 分子和分母 这两种方式中哪一种更有可能提供高效的算术在性能方面
  • 如何用 C 语言编写布尔表达式计算器?

    假设我在文本文件中有一个这样的字符串 var1 AND var2 AND var3 OR var4 AND var5 OR var6 AND var7 将其解析为 C 程序并正确处理和设置变量后 它将最终看起来像这样 1 AND 0 AND
  • MVC、DbContext 和多线程

    关于这些主题有很多问题 每个人都有自己的看法 也许有人可以就以下问题给我一个很好的答案 我有一个 Asp NET MVC Web 服务 它使用 EntityFramework 来访问数据库 有一个控制器 每次用户向 Web 服务发出请求时都
  • Ignite C++ 客户端用于 cassandra 集成

    我正在开发一个数据通信应用程序 我想通过 ignite c 与 cassandra 进行通信 当我尝试将数据放入 cassandra 时 它工作正常 但我无法从中获取数据 这是我的代码 test h namespace ignite nam
  • 如何延迟未命名对象的销毁?

    我正在使用TempDir struct https doc rust lang org tempdir tempdir struct TempDir html search 在磁盘上创建和删除文件夹 这TempDir除了其构造之外 代码中并
  • 如何增加 android Log 类的控制台输出

    对于 Android 平台上的默认 Log 控制台输出的字符数量有限 大约等于 3000 多一点 因此 如果消息长度超过 3000 个字符 则不会在屏幕上显示 我还没有找到比这更好的解决方案 public class Log private
  • WPF 和 WCF 数据服务在查询级别进行身份验证?

    所以 我发誓我对如何保护 WCF 数据服务完全感到困惑 在这方面 是否有一种简化的检查方法 以确保将数据发送到 WCF 服务的客户端经过身份验证 确保客户端本身是我编写的客户端 而不是某个模拟客户端 有什么网址可以帮助我解决这个问题吗 我使
  • 为什么在 Python 类定义的生成器中会出现此 NameError?

    在 Python 3 5 0 中 这段代码 a 1 2 class Foo object b 3 4 c tuple i j for j in b for i in a d tuple i j for i in a for j in b 产
  • 用于测试系统稳定性的函数,接收预测的时间序列作为输入

    我想编写一个函数 获取时间序列和标准差作为参数 并返回看起来像预测的调整后的时间序列 通过这个函数 我想测试一个系统的稳定性 该系统获取天气的预测时间序列列表作为输入参数 我对此类函数的方法如下所述 vector
  • getimagesize() 与 finfo_file() 用于检测图像类型?

    有时图像没有扩展名 但仍然有效 我有一个文件上传表单 需要检测文件类型以将其与我的白名单进行比较 我知道我不能信任从浏览器发送的 mime 类型 因此从我所做的研究来看 这两个选项似乎是可用的 它们仅在上传文件后才起作用 info geti
  • 如何在 TypeScript 中访问静态方法

    我正在尝试这样做 但它没有像我预期的那样工作 我使用的是 AMD 选项 logger ts export class Logger static log message string do stuff main ts import logg
  • Javascript 性能 - Dom Reflow - Google 文章

    有人可以向我证明给出的建议吗here http code google com speed articles javascript dom html 复制如下 关于在更改 dom 元素之前删除它们然后重新插入它们的速度更快 作为证明 我想看
  • R 中的加权随机数生成

    我正在尝试生成一组固定范围内的 100 个随机整数 一个可以由 1 到 3 之间的 100 个数字组成 并具有获得 1 2 和 3 之一的特定概率 任何帮助 将不胜感激 See sample 例如 sample c 1 2 3 size 1
  • OCaml中的fold_tree

    你可能知道 OCaml中有一些高阶函数 例如fold left fold right filter等 在我的函数式编程课程中 引入了名为fold tree的函数 它类似于fold left right 不是在列表上 而是在 二元 树上 它看
  • .NET 4.5 异步等待和重载方法

    我有一个异步方法 public async Task
  • 不同的闭包在快速保留周期中给出不同的结果

    我正在阅读 Apple 的 Swift 编程语言指南 在关于闭包的强引用循环的部分中 我尝试了一种不同类型的闭包 但它没有给出预期的输出 class HTMLElement let name String let text String l
  • scipy.io 的导入问题

    我一直在尝试开始使用 scipy 但该软件包给我带来了一些问题 本教程很大程度上依赖于 scipy io 但是当我导入 scypi 并尝试使用 scipy io 时 出现错误 In 1 import scipy In 2 help scip
  • 线程安全哈希映射?

    我正在编写一个应用程序 它将返回一个 HashMap 给用户 用户将获得此地图的参考 在后端 我将运行一些线程来更新地图 到目前为止我做了什么 我已经创建了所有后端线程 因此共享一个公共通道来更新 MAP 因此 在后端 我确信并发写入操作不