Какой шаблон или метод лучше всего загрузить статический кеш?JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Какой шаблон или метод лучше всего загрузить статический кеш?

Сообщение Anonymous »


Предположим, у меня есть следующее (предположим, что оно ограничено Java 1.4, поэтому нет дженериков):

публичный класс CacheManager { статические состояния HashMap; статические логические состоянияLoaded; public static String getState(String abbrev) { если(!stateLoaded) { ЗагрузитьСостояния(); } return (String) States.get(abbrev); } частная статическая сила loadStates() { //JDBC-материал для загрузки данных штатыLoaded = правда; } } В многопоточной среде с высокой нагрузкой, такой как сервер веб-приложений, теоретически могут возникнуть проблемы, если > 1 поток пытается получить и загрузить кеш одновременно. (Предполагаем, что в веб-приложении нет стартового кода для инициализации кеша)

Достаточно ли просто использовать Collections.synchronizedMap, чтобы это исправить? Есть ли проблемы с производительностью возвращаемого SynchronizedMap при выполнении get(), если к нему обращается множество потоков?

Или было бы лучше иметь несинхронизированный HashMap и вместо этого синхронизировать метод загрузки или логическую переменную? Я думаю, что если вы синхронизируете любой из них, вы можете заблокировать класс.

Например, если метод загрузки был синхронизирован, что, если 2 потока одновременно войдут в метод getStates() и оба увидят, чтоstateLoaded имеет значение false. Первый получает блокировку метода, загружает кеш и устанавливает дляstateLoaded значение true. К сожалению, второй поток уже оценил, чтоstateLoaded было ложным, и переходит к методу загрузки, как только блокировка будет освобождена. Разве он не продолжит загрузку кэша еще раз?
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»