Вы можете изменить карту во время чтения. Поэтому, по крайней мере, по этой причине вам следует рассмотреть возможность использования ConcurrentHashMap
или использовать явный механизм синхронизации, так как HashMap
не предназначен для использования таким образом:
Обратите внимание, что эта реализация не синхронизирована. Если несколько потоков
получить доступ к хэш-карте одновременно и, по крайней мере, к одному из потоков
изменяет карту структурно, она должна быть синхронизирована извне.
Или используйте ConcurrentHashMap
.
Обратите внимание, что ConcurrentHashMap
может не соответствовать, поскольку вы хотите получить значение, связанное с ключом, в определенный момент времени в соответствии с временной шкалой. Как и в ConcurrentHashMap
, операции поиска не блокируются, они отражают последнюю «известную информацию», которая не обязательно является последней хронологической информацией :
Операции получения (включая get) обычно не блокируются, поэтому могут
перекрываются с операциями обновления (в том числе положить и удалить). извлечения
отражать результаты последних завершенных операций обновления
держась за их начало.
Как правило, точная информация в момент I
зависит от ваших требований. Вы не объясняете свой, но все равно, это не имеет значения, потому что в соответствии с вашим реальным кодом к методу одновременно обращаются потоки, которые не манипулируют одним и тем же ключом / значением. Итак, эта ConcurrentHashMap
особенность не является проблемой.
Так что, похоже, очень хороший вариант использования для ConcurrentHashMap
.