У меня есть @RestController("tables") со следующей зависимостью:
private Map<String, Table> tables;
Поле tables было объявлено в СпрингКонфиг как синглтонфасоль и содержит информацию обо всех таблицах.
Перед обновлением какой-либо таблицы следует проверить, существует ли она, и только в этом случае обращаться к базе данных.
После создания вы должны добавить таблицу в таблицы и т.д.
Контроллер может выполнять операции CRUD с таблицами.
Как обеспечить корректную работу с разделением ресурсов?
Насколько я знаю, я могу использовать ConcurrentHashMap вместо обычного HashMap. В этом случае он будет хорошо работать с добавлением и вводом, но когда необходимо обновить значение (его поля), у меня будут проблемы.
И если у меня есть зависимость, например, какой-то privateTable table - singleton bean, должен ли я использовать блок synchronized или что-то еще?
Если можно, дайте мне несколько примеров, чтобы понять, как это работает.
Основная идея — понять, как предотвратить появление некорректных данных, когда разные потоки имеют доступ к одному и тому же ресурсу.
Как поля хранятся на карте? Это JSON, список через запятую или ArrayList? Если это не структура данных List, разве вы не можете использовать CopyOnWriteArrayList? Судя по характеру проблемы, это не похоже на очень загруженный процесс. Если это так, разве вы не можете просто использовать любой простой кодовый замок, например synchronized? Если нет, пожалуйста, уточните проблему с этими деталями и своим пониманием того, почему это невозможно сделать?
@flakes, и если у меня есть ситуация, когда мои записи не могут быть неизменными, как я могу обновить их на карте?
Карта @SaptarshiBasu содержит key-String и value-bean (pojo), созданные из json
@SaptarshiBasu Я могу использовать любые возможности, включая синхронизацию, но у меня нет практики работы с многопоточностью, и я ищу совета, чтобы убедиться, что я правильно понимаю, как решить эту проблему. Как работать с картой, как обновить значение карты (и сохранить предыдущее значение, изменив только некоторые поля), и как работать с java bean-компонентами. Я думаю, что с bean-компонентами я могу просто использовать синхронизированные внутри методы контроллера, когда у нас есть доступ к этому bean-компоненту, это правильно?




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