Синхронизация Map

152
09 декабря 2020, 17:20

Если из разных потоков в HashMap добавляются (только добавляются и не более того) записи, то необходимо ли при этом синхронизировать вызов метода put?

На сколько я понимаю, синхронизация могла бы потребоваться, если в один момент времени из разных потоков происходит как запись, так и чтение, и удаление, и прочее подобное, но если же речь идёт лишь о добавлении, то в синхронизации нет необходимости (какая уж разница как записи будут добавлены, меп просто будет в любом случае заполнена), или же есть какие-либо подводные камни?

Answer 1

Не совсем так, проблема может возникнуть при добавлении в тот момент, когда будет вычисляться адрес памяти, куда поместить элемент, чтобы связать его с текущей структурой HashMap, таким образом при добавлении 2х элементов одновременно, один из них может затеряться.

Также проблема может возникнуть когда один поток читает адрес, а другой удаляет, может возникнуть ситуация, что будет вычислен адрес для чтения объекта, но в это же время он будет удалён из Map, а следовательно данные станут не валидными.

Если вам нужна многопоточная HashMap, то имеется специальная реализация ConcurrentHashMap.

READ ALSO
A JNI error has occured, please check your installation and try again

A JNI error has occured, please check your installation and try again

При запускеjar файла возникает следующая ошибка:

272
Проблема с button JAVA (android Studio)

Проблема с button JAVA (android Studio)

Всем приветРешил сделать простенькое приложение для "изучения" английского

132
Не рисуется квадрат в path на java в canvas [закрыт]

Не рисуется квадрат в path на java в canvas [закрыт]

Хотите улучшить этот вопрос? Обновите вопрос так, чтобы он вписывался в тематику Stack Overflow на русском

113