2016-10-26 2 views
-3

Пожалуйста, подскажите, какую карту можно использовать для кеширования.Кэш-карта Java для многопоточных потоков

Мое использование - очень многопоточный сервер, который я бы хотел синхронизировать, а карта не синхронизирована.

Мое ожидание: если это произойдет, то немедленный get должен иметь последние обновленные значения.

Для нашего использования случайная синхронизация может не потребоваться для всей карты во время установки всегда, что мы делаем сейчас. Она должна быть синхронизирована, только если одно значение было загружено.

+2

В многопоточном программировании ** все ** доступ к общему объекту должен быть синхронизирован. Это просто неверно, только для синхронизации записи. –

ответ

1

ConcurrentHashMap правильный ответ здесь, так как он безопасен для использования одновременно из нескольких потоков.

В качестве альтернативы, если вы можете добавить зависимость от библиотеки, Guava's Cache может быть тем, что вы ищете.

Что вы должны не сделать, это использовать HashMap или другой нить небезопасной структуру без надлежащей синхронизации на каждый операции, как чтение и мутируют. Это просто не потокобезопасно, и может завершиться ошибкой в ​​terrible ways.