在 Spring 服务类中使用 ConcurentHashMap 和 AtomicInteger 作为实例变量

2023-12-10

我正在尝试在注入控制器的单例 Spring 服务中实现 ConcurentHashMap 的线程安全使用:

@Service
public MyService{

  final ConcurrentMap<String, AtomicInteger> myMap = new ConcurrentHashMap<String,   AtomicInteger>(10) {
        {/* initialize the ten key/values */
        }
    };

 public int add(String key) {
   return myMap.get(key).incrementAndGet();
 }

    // accessed via ajax loop (and controller), if value changes update display
  public int getCount(String key) {
    return myMap.get(key).get();
  }
}

有没有更好的方法来使对哈希图的访问成为线程安全的?我如何才能使其适应集群环境中的工作?这是后续我的另一个问题。


我的目的并不是要回答这个问题,尤其是。因为我没有集群情况的专业知识;不过,我想指出我认为值得注意的地方。

@JB Nizet 在其中一条评论中提到代码是线程安全 and correct。我想补充一下,但是不一致基于Java API 参考:

检索操作(包括 get)一般不会阻塞,因此可能 与更新操作重叠(包括放置和删除)

这意味着在进行某些更新时可能会有客户端获取此信息现在跑步。而且,这是有道理的,因为您在代码中提到了“循环”。所以,如果这是NOT对你来说很重要,那么一切都应该没问题。

但是,如果你需要使它更严格,我想也许使用一个实例ReentrantReadWriteLock将是一个不错的选择。该锁使您的代码能够阻止所有读取请求,直到出现持续的可用信息的快照。您可能会使用getCount方法严格阻塞直到add方法释放等待代码中使用的映射的一致快照的所有锁。

我还猜测,当您将其迁移到集群解决方案时,同样的担忧也是有效的;如果一致性需要跨不同的集群节点,那么应该照顾到。

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

在 Spring 服务类中使用 ConcurentHashMap 和 AtomicInteger 作为实例变量 的相关文章

  • 类型已知,但方法指的是缺失类型

    我对 java 和 Eclipse 不太有经验 但遇到以下问题 我正在写类似的东西 Point3D myPoint myClass myMethod arg 我收到错误 方法 myMethod myType arg 引用缺失的类型 Poin
  • 如何在 Android 中的 Chrome 或 Firefox 等特定浏览器的 Web 视图中加载应用程序

    我是 Android 新手 我正在做一个应用程序 我需要在平板电脑上的 Web 视图中加载现有的应用程序 在平板电脑中 当我使用 Web 视图加载应用程序时 我的应用程序将加载到默认浏览器中 如何在平板电脑上的 Web 视图中的特定浏览器
  • 是否可以使用 Java 读写 Parquet,而不依赖 Hadoop 和 HDFS?

    我一直在寻找这个问题的解决方案 在我看来 如果不引入对 HDFS 和 Hadoop 的依赖 就无法在 Java 程序中嵌入读写 Parquet 格式 它是否正确 我想在 Hadoop 集群之外的客户端计算机上进行读写 我开始对 Apache
  • 如何从 Java 访问 Windows 设备管理器中的信息?

    我有一个串行 USB 设备 并且其中多个设备可以连接到计算机 我需要查询和检索设备连接到的 COM 端口列表 在 Windows 设备管理器中 您可以获得当前连接的设备的 COM 端口 友好名称 该列表是动态的 从注册表中读取不工作 htt
  • Apache Thrift Java-Javascript 通信

    我正在编写一个基于 Apache Thrift 的 Java 服务器 它将从 Javascript 客户端接收数据 我已经完成了 Java 服务器 但问题是我可以获得 Javascript 客户端的工作示例 我无法找到一个好的示例 构建文档
  • Boost:如何创建一个线程以便可以控制它的所有标准输出、标准错误?

    我用 C 创建了一个 win32 控制台应用程序 我使用一些API 不是我的 我不能修改它的来源 它是这样写的 它会将一些信息写入控制台屏幕 而不询问 每次我调用它时 每秒 48 次 所以我想将它放入某个线程并限制其输出能力 但我需要得到当
  • 依赖于不同队列上的另一个操作的 NSOperation 无法启动

    我有操作的依赖图 并且使用多个队列来组织各种操作流 例如 peopleQueue sitesQueue sessionQueue sessionQueue loginOp fetchUpdatedAccountOp peopleQueue
  • C++11 非阻塞生产者/消费者

    我有一个 C 11 应用程序 其中有一个生成数据的高优先级线程和一个消耗数据的低优先级线程 在我的例子中 将其写入磁盘 我想确保高优先级生产者线程永远不会被阻塞 即它仅使用无锁算法 使用无锁队列 我可以从生产者线程将数据推送到队列 并从消费
  • 多线程 Web 应用程序

    我知道有很多情况都是在应用程序中使用多线程的好例子 但是什么时候最好在 net Web 应用程序中使用多线程 Web 应用程序几乎肯定已经由托管环境 IIS 等 实现多线程化 如果您的页面受 CPU 限制 并且想要使用多个核心 那么可以说多
  • 使用全局变量从内部函数获取空字符串

    请帮助我解决一些小问题 我确信你能做到 D 我试图在 firestore 文档 user cases information 上设置一个字段 其中包含一个字段 case number 首先我声明这个全局变量 private String c
  • Spring HATEOAS 和 HAL:更改 _embedded 中的数组名称

    我正在尝试使用 Spring HATEOAS 构建符合 HAL 的 REST API 经过一番摆弄后我终于开始工作了mostly正如预期的那样 示例 输出现在看起来像这样 links self href http localhost 808
  • FileObserver 不适用于 Android 6.0 Marshmallow (API 23) 中的外部存储

    我有一个应用程序可以观察外部存储上的公共目录FileObserver 它运行良好Lollipop设备 我想添加对Marshmallow 所以我用它设置了一台 Nexus 9 平板电脑 在 Marshmallow 设备上 它失败 在 Loll
  • 但是创建静态实用方法不应该被过度使用吗?如何避免呢? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 随着时间的推移 java项目中引入了许多实用方法来完成更复杂和简单的任务 当使用静态方法时 我们在代码中引入了紧密耦合 这使得我们的代
  • 如何在 Eclipse 中获得完全限定的类名?

    有没有一种快速方法可以在 Eclipse 中单击 Java 类并获取其完全限定名称 或将其复制到剪贴板 2016年6月29日编辑 正如 Jeff 所指出的 您只需要执行以下第二步 1 Double click on the class na
  • 膨胀类 android.support.design.widget.NavigationView 时出错

    我按照 NavigationView 的教程进行操作 但无法解决此错误消息 Error inflating class android support design widget NavigationView 教程链接 https www
  • java中如何重新初始化int数组

    class PassingRefByVal static void Change int pArray pArray 0 888 This change affects the original element pArray new int
  • 使用 Guava Ordering 对对象列表进行多条件排序

    我有一个类无法实现可比较 但需要根据 2 个字段进行排序 我怎样才能用番石榴实现这一目标 假设班级是 class X String stringValue java util Date dateValue 我有一个清单 List
  • Janusgraph 0.3.2 + HBase 1.4.9 - 无法设置 graph.timestamps

    我在 Docker 容器中运行 Janusgraph 0 3 2 并尝试使用运行 HBase 1 4 9 的 AWS EMR 集群作为存储后端 我可以运行 gremlin server sh 但如果我尝试保存某些内容 我会得到粘贴在下面的堆
  • 如何使用eclipse调试JSP tomcat服务?

    我想使用 Eclipse IDE 调试器来调试单独运行的 JSP Struts Tomcat Hibernate 应用程序堆栈 如何设置 java JVM 和 eclipse 以便设置断点 监视变量值并查看当前正在执行的代码 我刚刚用谷歌搜
  • Java时区混乱

    我正在运行 Tomcat 应用程序 并且需要显示一些时间值 不幸的是 时间快到了 还有一个小时的休息时间 我调查了一下 发现我的默认时区被设置为 sun util calendar ZoneInfo id GMT 08 00 offset

随机推荐

  • ActiveMQ:通过JMX获取连接列表?

    如何获取ActiveMQ OpenWire 连接器的连接列表 JConsole 能够列出连接 但我看不到可以使用哪个 视图 来获取列表 连接的对象名称示例 org apache activemq BrokerName localhost T
  • 在 JavaFX 2 中播放带字幕的视频

    我注意到 JavaFX 1 有一个SubtitleTrack用于从视频文件中提取字幕的类 但我在 JavaFX 2 中找不到等效的功能 javafx scene media似乎不存在 这个功能是否已经实现了 在什么情况下它转移到了哪里 或者
  • Appium 和 Selenium 网格的并行测试

    我正在尝试使用 appium 和 selenium 网格在 2 个设备上运行并行测试 但由于某种原因 它仅在第一个节点服务器 和第一个设备 上运行 但在第二个服务器上没有任何反应 另外 如果我关闭第一台服务器并运行测试 那么测试将在第二台服
  • Boost asio 处理程序不会保持 io_service 运行

    我想向 boost io service 添加一个信号处理程序 允许应用程序在用户按下 Ctrl C 时彻底关闭 这当然可以通过停止循环轻松完成 如下所示 boost asio io service service boost asio s
  • FB.ui 弹出窗口未关闭

    初始化代码 FB init appId 123456789012345 channelUrl http localhost Some Url FacebookChannel status true cookie true oauth tru
  • 如何将接收字节图像的对象转换为实际图像?

    我正在用 C 开发智能设备应用程序 我正在调用网络服务 Web 服务方法返回谷歌地图 该方法的返回类型是对象 该对象包含字节格式的图像 该对象包含 base64binary 格式的图像 我需要在我的应用程序中显示实际图像 我需要进行什么类型
  • jpa2/eclipselink 合适的 DAO 结构是什么?

    我有 JPA 实体并且需要用它们执行逻辑 到目前为止 一个巨大的静态数据库类完成了这项工作 它很丑陋 因为每个公共接口方法都有一个使用 EntityManager 的私有等效方法来执行事务 但我也可以通过静态 em 来解决这个问题 然而我想
  • gfortran 需要格式宽度而 ifort 不需要?

    我正在尝试将 FOR 文件 出于练习目的 从 ifort 迁移到 gfortran 该文件在我的 Intel Visual Fortran 解决方案中编译时没有任何问题 但是 当我使用以下命令在 gfortran 中编译它时 gfortra
  • 为什么 ObservedObject 数组未在我的 SwiftUI 应用程序中更新?

    我正在玩 SwiftUI 试图了解如何ObservableObject作品 我有一个数组Person对象 当我添加一个新的Person到数组中 它会重新加载到我的视图中 但是如果我更改现有的值Person 它不会重新加载到视图中 Names
  • 如何获取 std::locale 的日期和时间的当前“本地化模式”

    到目前为止 我能够获取当前的区域设置 但我想获取该特定区域设置的日期格式 这可以用标准库来完成吗 include
  • 使用 EF Core IdentityContext 和 DbContext 进行订单管理

    我正在 ASP MVC Core 2 上创建一个电子商务网站 我继承了我的用户IdentityUser并继承了上下文IdentityDbContext用于处理用户数据并继承了不同的上下文DbContext用于处理产品和订单等 现在 我想将订
  • 在 Ruby 安装期间遇到 RVM 问题 (1.9.2)

    我正在尝试通过 RVM 安装 ruby 但收到以下错误 并且日志不太清楚发生了什么 有人遇到过这种情况吗 我似乎记得 Ruby 不应该以 root 身份安装 但我对收到的权限错误有点怀疑 Installing Ruby from sourc
  • 如何使用 PHP 中的curl 上传文件

    如何在 PHP 中使用 cURL 或其他方式上传文件 换句话说 用户在表单上看到文件上传按钮 表单被发布到我的 PHO 脚本 然后我的 PHP 脚本需要将其重新发布到另一个脚本 例如在另一台服务器上 我有这个代码来接收文件并上传它 echo
  • 10 秒内完成 Postgresql 查询

    有没有办法创建一个将运行十秒的查询 我不需要真实的数据 只是一种长时间运行查询的方法 这样我就可以测试系统在这段时间内的工作情况 我不想创建一个巨大的表并为此进行简单的选择 有什么技巧吗 pg sleep SELECT pg sleep 1
  • 使用 C++ 和 NativeActivity 类获取 Android APK 的名称

    我正在使用 NDK 和 NativeActivity 编写 Android 应用程序 我的应用程序依赖于一些作为资产提供的第三方代码 目前 我正在尝试提取这些资产 同时保持文件夹结构完整 我尝试过使用 AssetManager 但为了保持文
  • 找到点的质心[关闭]

    很难说出这里问的是什么 这个问题模棱两可 含糊不清 不完整 过于宽泛或言辞激烈 无法以目前的形式合理回答 如需帮助澄清此问题以便重新打开 访问帮助中心 我有N分 每个点都有 X 和 Y 坐标 我需要找到该点的质心 X 和 Y 你能给我一个算
  • 停止 TextChanged 上的回发

    我在 aspx 页面中有一个文本框 其中附加了一个 TextChanged 事件 我还在文本框中附加了一个验证器 当文本更改时 将触发验证 但如果出现错误 仍会调用 textchanged 事件 您知道如果验证器触发是否可以停止 textc
  • JQuery .load() 使内容在加载后不可点击

    我有一个页面 其中有一个 div 该 div 中的内容由包含页面填充 并且该包含页面正在调用数据库来检索内容 当用户单击 添加任务 按钮时 将进行 ajax 调用以将内容插入数据库 并使用 load 刷新显示所有任务的 div 删除任务 也
  • 如何使用 JavaScript 合并 JSON 对象?

    如何使用普通 不带 jQuery JavaScript 合并 JSON 对象 要求是 转换自 chartData date 2014 05 1 CAT1 0 1 date 2014 05 1 CAT2 0 2 date 2014 05 1
  • 在 Spring 服务类中使用 ConcurentHashMap 和 AtomicInteger 作为实例变量

    我正在尝试在注入控制器的单例 Spring 服务中实现 ConcurentHashMap 的线程安全使用 Service public MyService final ConcurrentMap