Я пытаюсь написать матчмейкера для покупки и продажи предметов. Внутренне я использую 2 HashMaps, 1 для покупок и одну для продаж для каждого предмета, т.е. если пользователь отправляет мне запрос на покупку, я помещаю его в свой HashMap на покупку и наоборот. Ключом является цена, в то время как значение представляет собой очередь заказов по этой цене (так что я могу принимать запросы на основе FIFO, если они имеют одинаковую цену. Как только я получаю запрос, например, на покупку, я просматриваю HashMap на продажу для Любые совпадения. Пользователи могут изменить количество или цену того, что они хотят купить, но они не сами товар, например, могут изменить цену или количество запроса на покупку велосипеда, но не могут изменить велосипед на лодку)
Я хотел бы сделать это многопоточный, так что несколько запросов могут быть обработаны одновременно. Поэтому я сделал свои хеш-карты в ConcurrentHashMaps и в очереди со значением ConcurrentLinkedQueue. Тем не менее, могут возникнуть проблемы с параллелизмом, например, я просматриваю карту продажи, чтобы найти совпадение для моего запроса на покупку, но пока я делаю совпадение, запрос на продажу изменяется пользователем, скажем, по другой цене.
Как я могу синхронизировать две карты друг с другом? Я хотел бы заблокировать один и тот же сегмент (т.е. очередь по этой цене) на обеих картах одновременно.