java - 如何同步2个ConcurrentHashMap?

标签 java multithreading hashmap concurrenthashmap

我正在尝试编写一个用于买卖元素的媒人。在内部,我使用 2 个 HashMap,每个商品 1 个用于购买,1 个用于销售,即如果用户向我发送购买请求,我会将其放入我的购买 HashMap 中,反之亦然。反之亦然。关键是价格,而值是该价格的订单队列(这样,如果价格相同,我可以以先进先出的方式处理请求。一旦我收到请求,例如购买,我就会查看出售HashMap 用于任何匹配。用户可以更改他们想要购买的商品的数量或价格,但不能更改商品本身,例如可以更改自行车购买请求的价格或数量,但不能将自行车更改为船)

我想使其成为多线程,以便可以同时处理多个请求。因此,我将 hashmaps 放入 ConcurrentHashMaps 中,并将队列放入 ConcurrentLinkedQueue 值中。然而,仍然可能存在并发问题,例如我正在查看销售 map 以找到与我的购买请求匹配的匹配项,但是当我进行匹配时,销售请求会被用户修改为不同的价格。

如何使用彼此同步两张 map ?我想同时在两个 map 中锁定相同的段(即该价格的队列)。

最佳答案

添加单个 map ,您可以在其中跟踪可用库存,仅在那里进行锁定。

注意:ConcurrentHashMap 也不锁定单个条目,而是锁定存储桶,因此可能有更多元素。

关于java - 如何同步2个ConcurrentHashMap?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60898873/

相关文章:

java - 在java中使用接口(interface)或类型定义变量?

c - C编程中的多线程scanf来自线程而pther线程printf

java - java中hashmap数据结构的实现

android - 如何使用共享首选项在 android 中存储 HashMap <Integer, String>?

java - 在类路径中找不到任何 META-INF/persistence.xml 文件(wildfly、maven)

java - 检测在 selenium java 中下载的文件

java - Restful : How to hide Test Data from Report?

javascript - osx 多线程和 webview

multithreading - 等待分离线程完成的正确方法是什么?

Scala HashMap 多个值