мне нужна карта со следующими требованиями:Параллельной Карте с фиксированным размером
Это должно быть весьма одновременно. Методы
put()
,get()
иremove()
могут вызываться одновременно несколькими потоками.Он должен быть фиксированного размера. Если размер
HashMap
достигает максимального значения (например, 10000), добавление новой записи на карту не допускается. Он НЕ МОЖЕТ быть кешем LRU, где самая старая запись удаляется при достижении максимального размера.
ConcurrentHashMap
может удовлетворить # 1. Но не уверен, как №2 можно реализовать поверх ConcurrentHashMap
без влияния на параллелизм (добавление настраиваемого метода put()
, который будет добавляться к карте только тогда, когда размер меньше максимального размера, должен быть «синхронизирован». цель использования параллельного HashMap
).
Пожалуйста, дайте мне знать ваши мысли.
проверить размер перед тем, как положить? – vefthym
в concurrenthashmap размер сообщения не является точным. возможно, использовать concurrenthashmap с счетным семафором? –
«не уверен, как №2 можно реализовать поверх ConcurrentHashMap без влияния на параллелизм» ... Я не понимаю, почему это будет проблемой. Вы создаете обертку, которая на вершине параллельной карты вводит счетчик. Для синхронизации доступа к счетчику вы используете свой собственный примитив syncronizing (например, ReentrantLock), чтобы свести к минимуму дополнительные служебные данные и отделить его от параллельной синхронизации карт. Тогда все должно работать нормально – heorhi