2015-11-23 3 views
2

Есть ли класс карты в Гуаве (или где-то еще), который обеспечивает как функции EnumMap, так и ConcurrentHashMap? Таким образом, я мог бы реализовать реалистичную реализацию потоков, которая очень быстрая с ключами перечисления?Сочетание EnumMap и ConcurrentHashMap в Гуаве?

Я знаю, что могу полностью обернуть EnumMap на полностью синхронизированной карте с вызовом Collections.synchronizedMap(), но это не полная (дорогая) синхронизация, что я ищу.

+1

Теоретически не очень сложно реализовать его самостоятельно, используя 'AtomicReference []' array ... –

+0

Не встроенный в Guava или JDK, нет, я боюсь, что нет. –

+0

Спасибо Луи. Думаю, ты в команде Гува? Почему этого класса нет? Это странное требование? Любой план добавить его в будущем? – Sergio

ответ

1

Это действительно зависит от того, что вы подразумеваете под Это не полная синхронизация, что я ищу. Просьба уточнить.

Я бы обернул ваш EnumMap в держатель, который реализует блокировку чтения/записи на карте.

+0

, но это близко к тому, что делает Collections.synchronizedMap(), правильно? – Sergio

+0

@Sergio - Возможно, но вполне вероятно, что 'Collections.synchronizedMap()' синхронизирует ** все ** доступ, т. Е. Ни один из двух потоков никогда не получает параллельный доступ. Мое предложение состоит в том, чтобы улучшить это, разрешив несколько запросов на чтение параллельно, но доступ на запись получает эксклюзивный доступ. Опять же, это зависит от того, что вы подразумеваете под * не полной синхронизацией, что я ищу *. – OldCurmudgeon

+0

ConcurrentHashMap ограничивает блокировку. Я не знаю детали реализации, но, вероятно, делает это, блокируя объект, связанный с слотом в соответствующем массиве записей. Я ищу то же самое, но с преимуществами производительности EnumMap, так как мои ключи перечислены. – Sergio

Смежные вопросы