Я хочу инициализировать хеш-таблицу внутри моего класса только один раз для моего веб-приложения.
Если вы хотите, чтобы для вашего веб-приложения был только один экземпляр, тогда вы можете выбрать:
голый static
(неприятный !!),
a static
, обернутый классом со статическими методами (неприятный и неудобный дляиспользуйте),
и static
, завернутый с использованием шаблона класса Singleton (не такой неприятный / неловкий, но не без проблем), или
общий экземпляр, который создается и внедряется с использованием инфраструктуры внедрения зависимостей (DI).
Последний вариант лучше всего подходит по ряду точек зрения, но он предполагает изменение вашего веб-приложения для использования DI,что будет разрушительным.
Поэтому я предлагаю вам прочитать шаблон класса Singleton и узнать, как его реализовать в Java, чтобы он создавал и инициализировал потокобезопасным способом:
Тогда возникает отдельный вопрос / вопрос о том, как вы используете хеш-таблицу в поточно-ориентированном режиме.И ответы / решения зависят от того, как ваше приложение будет использовать хеш-таблицу после ее инициализации.
Если веб-приложение только когда-либо считывает хеш-таблицу, тогда достаточно простого HashMap
.
Если веб-приложению необходимо прочитать и обновить хэш-таблицу, то можно выбрать между ConcurrentHashMap
или синхронизированной оболочкой для обычногоHashMap
.
Если в таблице может быть много потоков, желающих выполнить операции (т. Е. Вероятна проблема с блокировкой), ИЛИ если вам нужно иметь возможность выполнять итерациюзаписей в таблице, пока обновления могут происходить, затем используйте ConcurrentHashMap
.
В противном случае HashMap
с оболочкой синхронизации будет достаточно.