Если из разных потоков в HashMap
добавляются (только добавляются и не более того) записи, то необходимо ли при этом синхронизировать вызов метода put
?
На сколько я понимаю, синхронизация могла бы потребоваться, если в один момент времени из разных потоков происходит как запись, так и чтение, и удаление, и прочее подобное, но если же речь идёт лишь о добавлении, то в синхронизации нет необходимости (какая уж разница как записи будут добавлены, меп просто будет в любом случае заполнена), или же есть какие-либо подводные камни?
Не совсем так, проблема может возникнуть при добавлении в тот момент, когда будет вычисляться адрес памяти, куда поместить элемент, чтобы связать его с текущей структурой HashMap, таким образом при добавлении 2х элементов одновременно, один из них может затеряться.
Также проблема может возникнуть когда один поток читает адрес, а другой удаляет, может возникнуть ситуация, что будет вычислен адрес для чтения объекта, но в это же время он будет удалён из Map, а следовательно данные станут не валидными.
Если вам нужна многопоточная HashMap, то имеется специальная реализация ConcurrentHashMap
.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
При запускеjar файла возникает следующая ошибка:
Всем приветРешил сделать простенькое приложение для "изучения" английского
Хотите улучшить этот вопрос? Обновите вопрос так, чтобы он вписывался в тематику Stack Overflow на русском